List和Set比较,各自的子类比较(ArrayList,Vector,LinkedList;HashSet,TreeSet)
- List 线性表
- Set 唯一数据集
ArrayList 底层数组实现 地址连续 查询/更改速度快 , 插入/删除速度慢。
Vector 底层数组实现 线程安全 ;很多方法包含了sync标识符; 但性能较低,相比ArrayList。
LinkedList 底层链表实现;查询速度相对较慢,插入、删除速度快。
HashSet 底层Entry数组实现(每个EntryNode会指向下一个,哈希桶、链表);根据Hash算法,设置key,如果哈希碰撞,同一个哈希值下,可能是个线性表(同一Hash值小于8数据),或红黑树(同一Hash值大于等于8个数据,使用二叉树查询、遍历要快一点)。
TreeSet 排序的Set , 二叉排序树实现。
- TreeSet 是二叉树实现的,Treeset中的数据是自动排好序的,不允许放入null值 。
- HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束 。