常见三大类List、Set、Map
其中List、Set继承Collection,Map是独立接口
List(有序、可重复)常用实现类
ArrayList 底层数据结构为数组 查询快、增删慢 线程不安全,效率高
Vector 底层数据结构为数组 查询快、增删慢 线程安全,效率低
LinkedList 底层数据结构为链表 查询慢、增删快 线程不安全,效率高(继承queue)
Stack(栈)继承Vector 特点:FILO 注意没有Queue实现类,只有Queue接口。
Set(无序、不重复、线程不安全)
HashSet 底层数据结构是哈希表(无序、唯一) 唯一性(hashcode()与equals()保证)
LinkedHashSet 底层数据结构是哈希表和链表 (FIFO插入有序 唯一) 由链表保证有序,哈希表保证唯一
注意这里的有序不是指的从小到大排序的有序,而是保证输入的数据存储有序
TreeSet 底层数据结构是红黑树(唯一、有序) 自然排序与比较器排序保证元素有序,根据比较的返回值是否为0保证元素唯一性
重点
如何选择:数据不能重复 Set 可以重复 List
有序选 TreeSet/LinkedHashSet 线程安全选 Vector
无序选 HashSet 不安全 ArrayList(查询多)/LinkedList(增改多)
Map
HashMap 无序 线程不安全 效率高 key和value可以为null
TreeMap 有序 线程不安全
HashTable 无序 线程安全 效率低 不允许为null
排序
底层是数组的可以直接调用sort()方法进行排序
引用.sort((o1,o2)->{
if(o1>o2) return 1;
else if(o1<o2) return -1;
else return 0;
});
注意:LinkedList底层是链表可以使用Collections.sort()方法进行排序
遍历
顺序存储 链式存储
for循环 读取性能高(适合) 时间复杂度太大(不合适)
迭代器 不在乎时间的话可以使用 推荐使用
foreach 基于迭代器实现的但是比使用迭代器慢,优点写着方便
使用for循环可以修改数据,使用迭代器不能删除数据,可以修改数据(对象为引用,可以使用修改调用类的set方法修改)
基本类型的包装类不能修改