Java笔记1.1--ArratList LinkedList hash相关

ArrayListt (数组,满了后扩大空间,x1.5)以下用Array:一次性追加数据,一次性读取。线程不安全

 

LinkedList(双向链表)随机增删查用Link.线程不安全

 

Vector(满了空间x2)线程安全。

 

关注深拷贝,浅拷贝。

迭代器遍历一个List时候抛出异常的原因:有一个modcount值,在把list放入迭代器的时候这个值就赋给迭代器中的一个值,因为list是线程不安全的,如果此时有人修改了这个list,这个modcout就会++,这个迭代器遍历中比较二者发现modcount改变了,所以抛出异常。

 

想在迭代器里遍历可以先定一个迭代器 

Iterator<String> it = strList.iterator();

这样在迭代的过程中可以删除元素,debug时候可以查看到源码中迭代器的上面说的那个值是同步更新的

public void remove() {
            if (lastRet < 0)
                throw new IllegalStateException();
            checkForComodification();

            try {
                ArrayList.this.remove(lastRet);
                cursor = lastRet;
                lastRet = -1;
                expectedModCount = modCount;//就是这个
            } catch (IndexOutOfBoundsException ex) {
                throw new ConcurrentModificationException();
            }
        }

1.结合散列函数,说明散列表快速索引的原理,说明如何解决冲突。

2.不重写hascode equals,就会调用object的,无法对key值为对象(某个类的实例化对象)进行有效比较。因为比较的是存储地址。基本数据类型和实例化对象存储位置不一样,不同的对象有不同的地址。

3.如何重写。最好根据类的主键进行判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值