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.如何重写。最好根据类的主键进行判断。

猜你喜欢

转载自blog.csdn.net/lfanchenyu/article/details/106912106