1.collection
collect为存储数据的集合类的顶级接口。所以不能实例化,只能实现collection,长度可变,集合为引用类型。
list和set是collection的实现类
2.list
list有序,可以重复,可以为空,实现类有ArrayList、LinkedList 和 Vector。
- linklist以链表的方式存储增删更快,线程不安全,效率高。
- arraylist以数组的方式存储,查询更快 ,效率高,线程不安全。
- vector线程安全,效率低,增长率为100%,数据量较大的数据
3.set
不可以重复,无序,treeset,hashset,linkhashset为set的实现类。
- hashset 数据结构是哈希表,按照hash值排序,不存在重复值,通过hashcode和equals判断。线程安全,存取快。
元素的哈希值是通过元素的hashcode方法来获取的, HashSet首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals方法 如果 equls结果为true ,HashSet就视为同一个元素。如果equals 为false就不是同一个元素。
哈希值相同equals为false的元素是怎么存储呢,就是在同样的哈希值下顺延(可以认为哈希值相同的元素放在一个哈希桶中)。也就是哈希一样的存一列。 - treeset 可以自然排序。不可重复。
- LinkedHashSet 会保存插入的顺序
4.map
map是map的接口的实现类,为键值对的,包括hashmap,treemap,hashtable,linkedtreetable。
- hashmap 且键唯一,键 值 可为空,线程不同步。
- treeMap 可以对集合中的键进行排序
- LinkedHashMap 保存了记录的插入顺序
- hashtable key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
5.遍历map
iterator it = map.entry rset.interator() while(it.hasnext()){ entry k = it..next() syso(k.getkey(),k.getvalue) }
6.线程安全问题
linklist arraylist hashset linkhashset线程不安全 vector hashtable为线程安全 stringbuffer为线程不安全 stringbuild为线程安全
7.总结
- ArrayXxx:底层数据结构是数组,查询快,增删慢
- LinkedXxx:底层数据结构是链表,查询慢,增删快
- HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
- TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序