集合:
基本的使用方法查询API即可,主要说说差异。
List:有索引,集合有序,怎么插入的,就按照什么顺序取出,且允许包含重复元素。
ArrayList:
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。
Vector:
底层数据结构是数组,查询快,增删慢。
线程安全,效率低。
LinkedList:
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。
在选择时,如果需要线程安全,就选择Vector,因为它线程同步。
如果不考虑同步问题,再看主要是进行查询操作还是进行增删操作,如果查询更多,就选择ArrayList,如果增删更多,就选用LinkedList
Set:不包含重复元素
HashSet:底层数据结构时哈希表。对集合的迭代顺序不做保证, HashSet 不是线程安全的 集合元素可以是 null。
TreeSet:元素唯一,并且可以对元素进行排序
排序:
a: 自然排序
b: 使用比较器排序
到底使用的是哪一种的排序取决于,构造方法.
使用TreeSet集合进行元素的自然排序,那么对元素有要求,
要求这个元素 必须实现Comparable接口 否则无法进行自然排序
保证元素的唯一性是靠compareTo方法的返回值来确定如果返回0 表示两个元素相等
则不重复存储
A:画图演示: TreeSet保证元素唯一和自然排序的原理和图解
二叉树的数据结构 先存入一个树根 分两个叉
存储元素时 跟树根比较 小的放在左边 大的放在右边
如果相等就不存储
取的时候按照 左中右的顺序来取
LinkedHashSet:有序且元素唯一
数据结构有两个: 链表和哈希表,链表保证有序 哈希表保证元素唯一
相对HashSet,TreeSet的优势是有序,劣势是相对读取慢。根据不同的场景选择不同的集合。而LinkedHashSet则是可以对去重后的结果进行预测性的顺序保障。
泛型(Generic):泛型日记
可变参数
增强for循环
双链集合
Map:存储键值对的集合。
HashMap:基于哈希表的Map接口。不保证迭代顺序,不是同步的。允许null值,但是允许一次。
两个影响其性能的参数:初始容量和负载因子。
初始容量:容量是哈希表中的桶数,初始容量是创建哈希表时的容量。
负载因子:指容量自动增加之前允许哈希表得到满足的度量。
当哈希表中的条目数超过负载因子和当前容量的乘积时,重新排列哈希表(即内部数据结构重新构建),以使散列表具有大约两倍的桶数。
TreeMap:基于红黑树的Map实现。对元素进行排序。
Hashtable:与HaShMap基本类似,不允许null出现,无论是作为键还是作为值。支持线程同步。
LinkedHashMap:哈希表和链表实现的Map接口,具有可预测的迭代顺序。
底层的数据结构是链表和哈希表 元素有序 并且唯一
元素的有序性由链表数据结构保证 唯一性由 哈希表数据结构保证