集合小记
List 有序可重复
Arraylist 底层是数组 查询快增删慢 线程不安全 效率高
linkedlist 底层数据结构是链表 查询慢 增删快 线程不安全效率高
Vector 底层是数组 查询快 增删慢 线程安全 效率低
Set 无序 唯一
Hashset 底层数据结构是哈希表 (无序唯一)如何保证唯一性,当有重复数据时会覆盖原来的数据
Linkedhashset 底层是链表和哈希表. 插入有序 唯一(fifo先进先出)
链表保证元素有序 哈希表保证唯一
Treeset 底层是红黑树 唯一有序
如何保证元素排序
自然排序
比较器排序
如何保证元素的唯一性呢
根据比较的返回值是否是0来决定
针对collection集合如何决定用谁?
先判断数据是否唯一? 如果唯一用set ,是否需要排序,是用treeset /linkedhashset,不是用hashset
不唯一用list,是否需要安全,是用vector否用ArrayList/linkedlist 个人建议都不要用vector
查询多用arraylist 增删多用linkedlist
如果只知道是collection集合,但不知道用谁,就用ArrayList
Map接口
Map接口有三个比较重要的实现类 分别是hashmap treemap和hashtable
treemap是有序的,hashmap和hashtable是无序的
hashtable的方法是同步的,hashmap不同步->
hashtable线程安全效率低,hashmap线程不安全效率较高
hashtable的所有public方法声明中都有synchronized关键字,hashtable的源码中则没有
hashtable中不允许有null值 hashmap允许null值
hashtable的父类中dictionary hashmap的父类是abstractmap
treeset的主要功能是用于排序
linkedhashset 的主要功能是保证fifo
hashset只是通用的存储数据的集合
三者都是线程不安全的
treeset可以内部实现排序,也可以自定义排序规则
内部实现自然排序
自定义排序,当存入外部类的实例时,外部类必须有排序规则,不然报错
外部类加入排序规则方法一,外部类实现compareable,重写compareto
方法二,new treeset时添加comparator(重写compare)
btree b+tree //TODO