day19 集合相关

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--官方定义

你可能感兴趣的:(day19 集合相关)