前言
使用java编程语言的开发人员,在日常开发过程中经常会使用到java的一些集合类,不过这些集合类太多,很多人对它们的特点和使用场景不是特别的了解,通过此文给大家总结一下这方面的知识,方便大家面试或者是初学者理解。
Java集合类主要由Collection和Map两个接口派生而出,另外还有遍历集合的工具Iterator迭代器:
Connection接口
Connection包含List和Set两大分支:
1、List( 有序、可重复)
ArrayList与Vector
①底层数据结构是数组,查询快,增删慢。
②前者效率高、线程不安全,后者效率低、线程安全。
LinkedList
①底层数据结构是链表,查询慢,增删快。
②线程不安全,效率高。
2、Set
HashSet(唯一、无序)
①底层数据结构是哈希表。
②两个方法:hashCode()和equals()
LinkedHashSet(唯一、有序)
①底层数据结构是链表和哈希表。
②由链表保证元素有序、哈希表保证元素唯一。
TreeSet(唯一、有序)
①底层数据结构是红黑树。
②自然排序、比较器排序。
③根据比较的返回值是否是0来决定是否唯一。
Map接口
key-value键值对,有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable,这三者之间的区别:
①TreeMap是有序的,HashMap和HashTable是无序的。
②Hashtable的方法是同步的、线程安全的;HashMap的方法不是同步的、线程不安全。HashMap效率较高,Hashtable效率较低。
③Hashtable不允许null值,HashMap允许null值(key和value都允许)。
④父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap。
总结
所有集合类都位于java.util包下,一般的使用场景大家只要知道list有序,set不能重复,map是键值对就差不多了,在一些特殊的场景,比如追求代码效率、线程安全等,那就要仔细区分下这些集合类了。