java中的数据结构——Collection

Java中的数据结构 分Map和Collection两种(Map和Collection都是接口)

java中的数据结构——Collection

java中的数据结构——Collection

Map的常用实现类:Hashmap、Hashtable、Treemap、LinkedHashmap、ConcurrentHashmap

Collection:

List:Vector、ArrayList、LinkedList

Set:HashSet、LinkedHashSet

List和Set区别:

1、List中元素放入是有顺序的,可以重复。Set去除重复元素,无序的,重复元素会覆盖掉。
2、Set检索效率低,删除和插入效率高,插入和删除不会引起元素位置的改变;而List和数组类似,可以动态增长,查找效率高,插入和删除效率低,会引起元素位置的改变。

Vector、ArrayList、LinkedList的特点:

ArrayList  底层是数组实现的,在声明时尽量指定长度。默认长度(容量)为10。非常适合用于查找,因为数组每个元素的内存空间是固定的,每次查询时,只需要去查询对应位置的内存空间,就可以很快找到相应的值。而数组不擅长的是添加和删除。线程不安全的,如果不考虑线程安全问题,一般使用ArrayList。

LinkedList 底层是链表实现的

Vector的底层也是数组实现的,和ArrayList一样都是封装了一个Object[],但Vector是一个比较古老的集合,JDK1.0就已经存在,建议不要使用这个集合,Vector是线程安全的,Vector的很多方法都加入了synchronized同步语句,来确保线程安全。不过效率比较低。

Arraylist和Linkedlist应用场景

     1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
     2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
     3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 

因为ArrayList的底层是数组,对于随机访问效率高,增加和删除比较慢。

因为LinkedList的底层是链表,不适合随机访问,增加和删除效率比较快

数据:

ArrayList 是线性表(数组)
get() 直接读取第几个下标,复杂度 O(1)
add(E) 添加元素,直接在后面添加,复杂度O(1)
add(index, E) 添加元素,在第几个元素后面插入,后面的元素需要向后移动,复杂度O(n)
remove()删除元素,后面的元素需要逐个移动,复杂度O(n)

LinkedList 是链表的操作
get() 获取第几个元素,依次遍历,复杂度O(n)
add(E) 添加到末尾,复杂度O(1)
add(index, E) 添加第几个元素后,需要先查找到第几个元素,直接指针指向操作,复杂度O(n)
remove()删除元素,直接指针指向操作,复杂度O(1)