集合
集合与数组区别:
1、集合长度可变,数组长度固定
2、数组可以是基本类型,也可以是引用类型。集合只能是引用类型。
3、数组只能存储同一种数据类型。集合可以存储不同的数据类型,而一般也只是存储同一种数据类型。
集合的分类:
1. Collection
List:元素按照进入的先后顺序保存,可以重复值
LinkedList接口实现类,链表,插入删除,没有同步,线程不安全。
ArrayList接口实现类,数组,随机访问,没有同步,线程不安全。
Vector接口实现类,数组,同步,线程安全。
tack是Vector的实现类。
Set:仅接收一次,不可重复值,并做内部排序。
HashSet使用hash表存储元素,数组类型
LinkedHashSet链表维护元素的插入次序
TreeSet底层实现为二叉树,元素排好序
2. Map
Hashtable接口实现类,同步,线程安全
HashMap接口实现类,不同步,线程不安全
LinkedHashMap双向链表和哈希表实现
WeakHashMap
TreeMap红黑树对所有的key进行排序
list和set的区别:
1、list保证按照插入的顺序排序。set存储和取出顺序不同
2、list值可重复。set值不能重复
3、list可以根据索引直接操作元素。set不能根据索引获取元素
HashSet:
- 底层数据结构是哈希表实现,元素无序且唯一,线程不安全效率高,可以存储null元素。线程唯一性是靠重写HashCode和equals方法保证,若没有重写这两个方法无法保证元素唯一;
- 数据会先通过判断HashCode值比较,如果HashCode不相等,那么所存储的两个对象一定不相等。如果HashCode相等,在进行equals比较。equals相等就是同一个对象,就无需存储;
LinkedHashSet:
- LinkedHashSet底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高。
TreeSet:
- 底层数据结构采用二叉树来实现,元素唯一且已经排好序;
- 二叉树结构保证了元素的有序性,根据构造方法不同,分为自然排序(无参构造)和比较器排序(有参构造)
Map:
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。
HashMap和Hashtable区别:
1、HashMap是异步的,线程不安全。HashTable是线程同步的,线程安全,使用了synchronized关键字
2、HashMap可以将一个空值作为key或value保存,最多只能有一个key为空,但是可以有许多的value为空。HashTable中不能有空值。
HashMap性能最好,HashTable性能最差。