集合简单笔记
List和set总结
-
List、Set都继承自Collection接口,Map不是。
-
List特点:元素有放入顺序,元素可重复。Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉。(元素在Set中的位置根据HashCode决定)。
-
Set和List对比:
- List:和数组类似,List可以动态增长,查找元素效率高,插入、删除元素效率低,因为会引起其他元素位置的改变。
- Set:检索元素效率低,插入删除元素效率高,插入和删除不会改变其他元素位置的改变。
-
ArrayList和LinkedList的区别和场景
- ArrayList:
- 优点:ArrayList时实现了基于动态数组的数据结构,因为地址连续,一旦数据存好了,查询操作效率会比较高。
- 缺点:因为地址连续,ArrayList要移动数据,所以插入和删除操作效率比较低
- LinkedList
- 优点:LinkList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新加和删除操作,LinkedList会比较占优势。LinkedList适合用于头尾操作或插入指定位置的场景。
- 缺点:因为LinkedList要移动指针,所以查询操作性能比较低。
- ArrayList:
-
TreeSet是二叉树(红黑树的数据结构)实现的,TreeSet中的数据是自动排好的,不允许放入null,值不允许重复。
-
HashSet是哈希表实现的,HashSet中的数据是无须的,可以放入null,但只能放入一个null,值不允许重复
Map
-
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,他们都可以使用任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。
-
HashMap:非线程安全。基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()(二者可以重写),为了优化HashMap空间的使用,可以调优初始容量和负载因子。
-
TreeMap:非线程安全基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。