我是靠谱客的博主 现实钢笔,这篇文章主要介绍java collection详解_java collection详解,现在分享给大家,希望可以做个参考。

collection和map的结构大概图:

0818b9ca8b590ca3270a3433284dd417.png

从图中可以看出:主要分成list,set,map,queue(不常用)这四个,

List主要的类有ArrayList、LinkedList、Vector;

List类:

ArrayList:

基于数组(list)的存储方式,数据可以重复,有下标,与线程不同步,这是与Vector的最主要区别,所以效率高。

Vector

基于数组(list)的存储方式,数据可以重复,有下标,与线程同步,效率比ArrayList低,但安全性比较高。

linkedList

采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引,缺点:读取速度慢,

允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:

List list = Collections.synchronizedList(new LinkedList(...));

List总结:

ArrayList和Vector

读取速度快,插入和删除速度较慢,因为有下标可以查询,插入的时候只能先查询,后在最尾端判断无内容再插入

LinkedList

读取速度慢,插入和速度快,因为存储的方式不同,每个空间保留有下一个索引,索引插入的时候直接房间数组里,内部自行会判断索引内是否有值,无值就放入,

读取的时候只能从头到尾查找,

Set类(特点:数据不能重复)

HashSet:

基于set的存储,数据无序插入,且数据不能重复,重复会覆盖;

LinkedHashSet,数据插入时有序,但数据依旧不能重复。

TreeSet:数据插入时有序,数据依旧不能重复,靠自然排序和客户化排序

Set总结:

Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象,

Map类

HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为null,不允许多条记录的值为null。HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections.synchronizedMap(HashMap map)方法使HashMap具有同步的能力。

Hashtable与HashMap类似,不同的是:它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,然而,这也导致了Hashtable在写入时会比较慢。

LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历的时候会比HashMap慢。有HashMap的全部特性。

TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器。当用Iteraor遍历TreeMap时,得到的记录是排过序的。TreeMap的键和值都不能为空。

HashMap和HashTable区别:

1、hashtable与线程同步,效率较差但安全性较高。hashmap不与线程同步,效率较高但相对hashtable安全性较差

2、map的键值对可以为空,有且只有一个,hashtable不能为空

3、出示的数组容量不同。

总结:

1、ArrayList 单个元素,效率高,多用于查询。

2、Vector单个元素,安全性高,多用于查询。

3、LinkedList单个元素,效率高,多用于插入和删除,(如果频繁插入和删除优先考虑)

4、HashMap: 元素成对,元素可为空

5、HashTable:元素成键值对,元素不能为空。

最后

以上就是现实钢笔最近收集整理的关于java collection详解_java collection详解的全部内容,更多相关java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(135)

评论列表共有 0 条评论

立即
投稿
返回
顶部