Java中一共有两大集合接口:Connection和Map
Connection接口:
List:有序,可重复
ArrayList
优点:底层数据结构是数组,查询快,增删慢。
缺点:线程不安全,效率高
LinkedList
优点:底层数据结构是链表,查询慢,增删快。
缺点:线程不安全,效率高
Vector
优点:底层数据结构是数组,查询快,增删慢。
缺点:线程安全,效率低
Set:无序,不重复
HashSet
底层数据结构是哈希表(无序,唯一)
依赖两个方法:hashCode()和equals()来保证元素唯一性
LinkedHashSet
底层数据结构是链表和哈希表(FIFO插入有序,唯一)
由链表保证元素有序,由哈希表保证元素唯一
TreeSet
底层数据结构是红黑树(有序,唯一)
自然排序、比较器排序来保证有序,根据比较的返回值是否是0来决定元素是否唯一
Map接口:
常见的Map集合有HashMap、HashTable和TreeMap
它们之间的区别:
TreeMap是有序的,HashMap和HashTable是无序的
HashTable的方法是同步的,HashMap的方法不是同步的
HashTable是线程安全的,HashMap不是线程安全的
HashMap效率较高,HashTable效率较低
HashTable不允许null值,HashMap允许null值(key和value都允许)
父类不同:HashTable的父类是Dictionary,HashMap的父类是AbstractMap
PS:
TreeSet,LinkedHashSet和HashSet的区别
TreeSet的主要功能用于排序
LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出)
HashSet只是通用的存储数据的集合