集合只能存放引用数据类型的数据。
集合分类:
集合的从属关系:
两类集合Collection、Map
Collection包括List、Set
List包括:VectorArrayListLinkedList
Set包括:HashSetTreeSetLinkedHashSet
Map包括:HashMapTreeMapHashTable
ArrayList和Vector的底层是相同的,Vector是线程安全的、ArrayList是线程不安全的。
HashMap是线程不安全的、HashTable是线程安全的。(结构相同)
HashSet的底层使用的是HashMap,且其Value都是同一个Object对象。
Hashmap底层结构是一个数组链表式结构,
第一层是一个长度为6的数组,数组的每个元素是一个链表。
链表的节点是node(实现了entry的一个类。entry在map中被定义为内部接口)
向hashmap里插入元素的过程
首先第一步是计算K对象的Hashcode值,通过hashcode%数组长度取模运算,得到此hashcode值对应的数组下标。
然后从第一个节点开始与K比较hashcode值,如果hashcode值相同再执行equeals方法。如果equals方法返回true,则对相应节点的valude进行覆盖,如果不为真则继续比较下一个节点,直到相同。如果最后都不相同则会在尾部插入此KV node。
hashset中存入的值就是每一个node 的K。它的底层是hashmap,所以都是相同的,不同的也是在map的基础上又改了改。
排序 TreeMap、TreeSet
第一种方法在TreeMap的构造方法中传入Compartor接口的匿名对象。
new TreeMap(new Compartor<String>{ 实现compare<String>方法 })
第二种方法是使元素对象实现Comparable接口实现CompareTo方法
这两个方法,都会返回整数,大于0的表示新插入的比旧的大,
TreeMap是升序的。
三种遍历list集合的方式
iterator
三个方法hasnext next remove
高级for
通过获取size来用for遍历。
两种遍历set的方式
keyset()+iterator
keyset()+for
三种遍历map
map.entryset()+for
keyset()+iterator
keyset()+for