单列集合和双列集合?(面试问题详解)
单列集合(就是只有一个值)
Collection(顶级接口)
- list(有序,可重复)
- ArrayList:
- 底层是数组(索引)
- 查询快,增删慢
- 容量不足扩容(扩容1.5倍)
- 线程不安全(底层方法没有同步)
- linkedList:
- 底层使用链表
- 查询慢(顺着链子查寻元素),增删快(一次操作)
- set(无序,不可重复)
- HashSet:
- 内部使用hashMap实现
- 存取都比很快
- 线程不安全(底层方法没有同步)
双列集合(key(建) = value(值))
- Map
- HashMap:
- key不可重复(两个方法,HashCode(),equals()),value可以重复()
- 判断key的hashCode是否重复,不重复就不是重复元素,直接存储。如果重复就调用equlas()方法 判断对象的所有属性是否相同,如果相同就不存储,如果不相同,就存储。
- 底层:数组+链表(+红黑二叉树(jdk1.8增加))
- key不能为null,value可以为null
- 线程不安全(底层方法没有同步