Collection:单列数据
Map:双列数据
2 Collection接口 2.1 简介1 存放多个元素,每个元素可以是Object
2 有些实现类可以存放重复元素:Collection—List—Vector,ArrayList,linkedList
3 有些实现类不可以:Collection—set—HashSet,TreeSet
2.2 Collection常用方法add( ) remove( ) contains( ) isEmpty( ) clear( )
addAll( ) containsAll( ) removeAll( )
2.3 Collection接口遍历方法iterator()迭代器 haveNext().Next()
增强for循环
Collection 没有.get(index)方法
3 List接口 3.1 简介继承了Collection
可以用索引,可以存放相同元素,有序
3.2 常用方法add( ) add(index,Object) addAll( )
get(index) indexOf() lastIndexOf( )
remove( ) set(index,object)
subList( )
3.3 List接口遍历迭代器
增强for
普通for
4 ArrayList类 4.1ArrayList底层是一个Object类型的数组
和Vector相比:线程不安全,多线程不建议使用
扩容机制:
创建时无参:大小为0,第一次加入元素扩容为10,之后数组满扩容,1.5倍
创建时有参:大小为参数,数组满扩容,1.5倍
5 Vector类底层也是对象数组
线程安全
扩容机制:
创建时无参:大小为10,数组满扩容,2倍
创建时有参:大小为参数,数组满扩容,2倍
无参时有默认大小——线程安全?
6 linkArrayList类底层维护了一个双向链表
有头指针first,尾指针last
每个节点有prev和next,item
linkArrayList的扩容就是一个一个连接到最后 不要设置大小
remove可以不带参——默认移除第一个
Vector和ArrayList的remove不可以不带参
增删linkedList效率高,改查ArrayList效率高
7 Set接口 7.1 简介Set不能用索引,不能有相同元素,无序,只能由一个null
7.2 常用方法和Collection一样
7.3 遍历迭代器
增强for
不能用索引
8 HashSet 8.1 机制底层是HashMap,HashMap底层是数组+链表+红黑树(1.8)
table里是HashMapNode
entrySet里是
先处理对象的HashCode,生成索引,索引不冲突直接加入
索引冲突就通过equals方法循环比较,都不同就加入最后,如果有相同的就放弃加入
放入的时候key是当前值,value是默认的
可以重写equals和hashCode方法
8.2扩容机制:扩容后会重新计算索引再分配
没参数
首次添加扩容到16
1 加入节点 ,不管加入在哪个位置(同一索引上的链表中,或者不同索引上)
达到临界值(threshold) 数组*0.75(加载因子loadFactor) 就会扩容两倍
2 如果反复增加相同hash值的 不同对象(8个) 就会落在相同索引的链表上
当链表长度大于8时,就开始判断当前数组数是否达到了64个
如果没达到就会2倍扩容 扩到64 此时节点还是加在了链表后面(可以超过8)
如果已经达到了64,就会将单链表转换成一颗红黑树
***有参的情况特殊 如果加入了15个 会在第13个加入时 扩容到32个
***最好不要有参
9 linkedHashSet底层是linkedHashMap
数组+双向链表
table里HashMapNode
有序
扩容同HashSet类似
10 TreeSet可以有序 无参
底层是TreeMap
默认按字符串大小
可以传自定义比较器
如果传入一个比较器 比较字符串大小 那么相同长度的字符串只能加入一个
底层是替换了value 没有 替换key
加入的对象 是 key
value有默认
如果没有传入比较器,就会将传入的对象向上转型为 Comparable 类型 调用key本身的compareto方法
如果传入了比较器,就按比较器比较
默认 字符大小
11 Map 11.1 简介双列,key不重复,value可重复
相同的key value会替换
11.2 常用方法put() remove( ) get( ) size( ) isEmpty( ) clear( ) containsKey( )
11.3 Map接口遍历1 keySet 返回key的Set 可以增强for循环 也可以 迭代器
2 values()(只有值) 返回Collection集合
3 entrySet 返回entry类型的set entry有getKey和getValue
迭代器迭代返回的set(Map.Entry类型)
12HashMap哈希表+链表+红黑树
扩容—
线程不安全
13 HashTable键值对都不能为null
方法基本和HashMap一致
线程安全
扩容机制:
无参底层初始化为 11
无参—默认大小—线程安全?
临界值 11*0.75 = 8
扩容 *2+1
最好不要有参(有参也会先按参数配置大小)
14 Propreties类继承了HashTable 用于从.properties文件中读取数据
15 linkedHashMap类与HashMap类似
16 TreeMap如果传入的比较器是字符串长度比较器
相同长度的key,value会被替换
默认按字符串大小排序
无参
TreeSet以及TreeMap无参



