Collection 每个槽只保存一个元素
ArrayList 可变长数组 add() get(下标) size()方法
通过泛型,可以在编译期防止将错误类型的对象方在容器中 。容器中不能使用基本数据类型,如int,可以使用其对应的对象,如Integer
Arrays.toString()打印数组
Arrays.asList()方法接受一个数组或是一个用逗号分隔的元素列表(使用可变参数),转换为List,但是底层表示还是数组,不能调整尺寸
Collections.addAll()方法接受一个Collection对象、数组、用逗号分隔的列表
Collection.addAll() 方法只能接受另一个collection对象作为参数,因此它不如上两个那样灵活
Collection
- ArrayList 数组
- LinkedList 提供了优化顺序访问,在插入和移除上效率更高,但是随机访问性能较差
- HashSet 无重复数据,最快获取元素的方式,不保存顺序
- TreeSet 无重复数据 按照比较结果的升序保存
- LinkedHashSet 无重复数据 按照被添加的顺序
Map
- HashMap 不保留顺序,查找最快
- TreeMap 按照升序
- LinkedHashMap 按照插入顺序 同时还保留了HashMap的查询速度 LRU算法
ContainsKey(), ContainsValue(),get(key), keyset()返回所有键值构成的set, values()返回值的Collection
List方法
- Contains() remove() indexOf()
- subList(1,4) 子集
- retainAll() 交集
- removeAll()删除全部
- isEmpty()是否为空
- clear()删除所有元素
- toArray()将任意Collection转换成数组
Iterator
- iterator()方法,要求容器返回一个Iterator, Interator准备返回序列第1个因素
- 使用next()返回下一个元素
- 使用hasNext() 检查序列中是否还有元素
- 使用remove()方法将迭代器新返回的元素删除
Iterable接口
- 任何类实现了Iterable类,都可以用于foreach语句中
- Foreach语句可以用于数组和其他任何Iterable,但并不意味着数组也是一个Iterable,数组必须手工执行转换
LinkedList 双向链表
- getFirst、Element() 返回列表头元素,如果为空,返回NoSuchElementException, peek() 返回null
- removeFirst()、remove() 移除并返回头,为空时返回NoSuchElementException, poll()空时返回null
- addFirst 插入队头
- offer()、add()、addLast() 插入列表尾端
- removeLast()移除并返回列表的最后一个元素
Queue
- Offer()将元素插入队尾
- Peek/element()返回队头
- Poll/remove()移除并返回队头,poll()在没有元素的情况下返回null
PriorityQueue 加上优先级
可加上comparator来选择优先方式,如Collections.reverseOrder()
Stack 装弹簧的存储器中放入自助托盘,最后装入的托盘总是最先弹出
- Peek()返回栈顶元素
- Pop()返回并移除栈顶元素
- Push()入栈
Set
- HashSet 散列
- TeeeSet 红黑树 在构造器中传入String.CASE_INSENTIVE_ORDER 排序时忽略大小写
- LinkedHashList 也是使用了散列,使用链表来维护了元素的插入顺序