1.list
- 带有索引均是list特性
- ctrl+shift+o导包
- awt是图形化界面
- remove(index)删除指定索引元素并返回被删除元素
- set(index)修改指定元素并返回被修改前的元素
- 迭代器并发修改
concurrentmodification错误并发修改:
在集合遍历过程中修改集合长度造成指针混乱
while (itr.hasNext()) {
itr.next();
arr.add(5);
}
2.存储结构
- 堆栈:先进后出
- 队列,先进先出
3.存储特点
- list类:查找速度块(内存连续),但是增删慢
- 链表:内存不连续,上一个数据记住下一数据地址,增删快,查找慢
- 日常是查找工作较多所以ArrayList使用很多
- linkedlist单向链接
4.linklist
- addfrist在头添加
- addlast尾添加
- getfrist,getlast获取头尾
- link.isempty ()=link.size()
- removefrist,removelast删除头尾,返回被删除
5.vector,被废弃的数组,安全线程其中向量枚举就是iterator
6.set接口
- 不允许重复元素,仅有迭代器和增强for,没有索引,
- set接口和父类collection一样
7.hashset(set本身依赖map实例)
- 不保证set迭代顺序但是可存null
- 底层数据结构哈希表(hashtable),存取均块,线程不安全
- 本类是链表数组结合体,性能和本身长度成正比,越长越慢,加载因子默认0.75
- 数组不够用就会扩容,一般扩容两倍以上复制均耗内存多
8.对象的hash值获取:hashcode(native方法)
- 哈希值是是否存到set中的判断
- String重写 hashcode
- hashtable存的判断重复方法(也就是set类判断重复)
拿到对象hash值,判断hash值有没有一样,
有就继续调用equals方法,equals也相同就判断重复不能存
- 判断重复自定义对象Person
重写hashcode:
name.hashcode()+age*55(55是非零任意,作用是降低重复率)
重写equals:
null,对象本身(this),Person类判断(instanceof)判断name和age相等
- linkedhashset 继承hashset有储存顺序(双重链表)
- contains也在调用equals,list中add返ture
- hashset中add会判断是否重复,重复就返false
- equals相等则hashcode一定相同,hashcode相同不一定equals--官方定义