枚举类使用
- 自定义
values就是用来遍历对象得
该方法就是用来找枚举类中得对象,错误就报异常
可以让每个对象都重写接口方法
注解
集合
list成为动态数组
map:映射
比较的是内容而非地址
迭代器
迭代器模式,不爆露内部细节
注意再remove之后再迭代需要重置指针,一定要注意
并且也不可以再没有调用next仍然调用remove,这两种方式都会报异常
Foreach循环遍历集合元素
增强for是重新赋值
之前arr的值不变
List
jdk7中默认构造器容量为10的elementData,add如果超过容量就扩容,右一一位即扩大为原来的两倍,同时会把数组数据复制到新数组中
所以建议直接使用带参构造器可以确定容量
jdk8中空参构造器不创建长度为10的数组
在第一次add中才会创造10的数组并将数据放入0号位置
总结:7类似与饿汉式,8类似于懒汉
式。节省空间
linkedlist源码时其中定义一个node,这是一个双向链表,前后指针
- arrarylist常用方法
aslist添加新数组
add是当作一个元素,addall是分开添加
indexof返回第一次出现的索引
Set
无序性指排序并非按照索引,而是哈希值排序
不可重复性就是指元素按照equals()判断,不能返回true
不可重复性用哈希值来判断,所用的就是拉链法。七上八下(新元素位置)
再未重写hashcode时调用的时object中的,这是一个这个的hash值是一个随机数
数大,素数,2的幂次方好移位
一致性就是相等对象拥有相同散列码
- linkedhashset
遍历效率高一些
TreeSet
TreeSet中只能用相同数据类型。自然排序实现comparable接口。
重写compareto方法
在对象相同时,方法返回0,而非equals
定制排序是和comparator相关
自然与定制的区别:当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码, 或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那 么可以考虑使用 Comparator 的对象来排序,强行对多个对象进行整体排 序的比较
map
key用set存储所在类要重写equals()与hashcode()
vaule用collection存储,value重写equals()
一个键值对构成一个entry对象
map的entry:用set存储所有entry
hashmap
7会创建entry数组,长度16
这样的如果是hash相同且equals返回true,put实际上还有一个替换功能
在超出临界值(16*0.75=12)扩容
8的底层数组为node(单向链表),第一次put调用创建16数组,其中未数组+链表+红黑树:这样不用想链表一样一个个比较。二叉排序树节约一半时间
当一个索引位置大于8且数组长度大于64则全部数据改为红黑树存储
LinkedHashMap
类似于linkedlist,重写了父类map中的putval方法中的newNode方法
并且其node继承父类node加上了前驱后继
小点:set的add实际上是把元素放入一个map,就是把set的元素放入了key
vaule放入的是object
- 常用方法:put,putall,remove,clear
clear是清楚堆中数组,map指向的table仍然存在
三种遍历
当同时需要两种
TreeMap
都是类似Treeset