java 集合总结

来源:互联网 发布:mysql my.ini配置下载 编辑:程序博客网 时间:2024/05/17 04:48

结构:

Collection
List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
Set
Map
Hashtable
HashMap
WeakHashMap

 

区别:

 

是否有序

是否线程安全

是否允许重复

是否允许空值

常用情景

描述

总结

LinkedList

有序

对于新增和删除操作addremoveLinedList比较占优势,因为ArrayList要移动数据。

LinkedList基于双向链表的数据结构

若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数 据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。

ArrayList

有序

对于随机访问getsetArrayList觉得优于LinkedList,因为LinkedList要移动指针

ArrayList是实现了基于动态数组的数据结构

Vector

有序

如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,arraylist增长率为目前数组长度的50%.如过在集合中使用数据量比较大的数据,用vector有一定的优势

 

Stack

有序

 

 

 

Stack继承自Vector,实现一个后进先出的堆栈

Set

 

 

 

Set是一种不包含重复的元素的Collection,即任意的两个元素e1e2都有e1.equals(e2)=falseSet最多有一个null元素

HashTable

无序

线程安全

任何作为key的对象都必须实现hashCodeequals方 法如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个对象相 同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如 果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希 表的操作

HashMap

无序

线程安全

HashMapHashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null valuenull key。,但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap 的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低

WeakHashMap

 

 

 

 

WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收

TreeMap

 

 

 

 

HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMapHashMap中元素的排列顺序是不固定的)

 

这里在解释下ArrayList  和 linkedList区别

ArrayList 从名字中可以看出是基于Array实现的,Array效率很高可是大小固定,并且可以通过下标index直接获取元素,不用一个个遍历,所有ArrayList做随机访问效率高些,若果是频繁插入、删除操作,ArrayList就需要频繁的创建临时Array,删除选中的元素,再把删除后的元素放到新的Array中去,插入同样如此,所以效率较LinkedList低。

LinkedList从名字中可以看出是基于Link实现(链表),大家知道链表中有一个指针,取元素是通过指针当前位置然后向左或者向后一个一个查找的,所以随机访问慢,但是如果是频繁插入元素,或者删除某个元素的效率会高些,因为这时我只用移动下指针就可以了。

0 0