java集合

集合的选择

需要通过键值选定元素时,使用map接口下的集合,需要排序时选择treeMap,不需要排序时选择hashMap,需要保证线程安全时选取ConcurrentHashMap。只需要存放元素时选择Collection接口下的集合,如果要保证元素的唯一性,treeSethashSet可满足。元素可重复的话,选择ArrayListLinkedList

集合说明

Map接口

  1. HashMap:JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间 参考链接1
  1. LinkedHashMap: LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。详细可以查看:《LinkedHashMap 源码详细分析(JDK1.8)》
  2. Hashtable: 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的
  3. TreeMap: 红黑树(自平衡的排序二叉树)

Collection接口

  1. Arraylist: 采取了数组的实现方式,加了个动态扩容的功能。Object数组存储数据,动态扩容。每次添加元素时,需要扩容的话,拷贝数据到更长的新数组。参考链接
  2. Vector: 和ArrayList一样,只不过套了一个synchronized,线程安全。尽量少用,高并发下封锁、解锁很慢。
  3. LinkedList:以双向链表的方式实现,可以无限大。参考链接
  1. HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素
  2. LinkedHashSet: LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。
  3. TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树。)

参考链接

集合框架底层数据结构总结

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。