Java回炉之集合框架
Collection
添加
- boolean add(Object obj):添加一个元素
- boolean addAll(Collection coll):添加一组元素
删除
- boolean remove(object obj):删除一个元素
- boolean removeAll(Collection coll):删除一组元素
- void clear():删除所有元素
判断
- boolean contains(object obj):是否包含一个元素
- boolean containsAll(Colllection coll):是否包含所有元素
- boolean isEmpty():判断集合中是否为空
获取
- int size():获取元素个数
- Iterator iterator():获取迭代器(用于遍历)
其他
- boolean retainAll(Collection coll):调用者对参数做交集,返回调用者是否发生改变。
- Object[] toArray():将集合转成数组
Iterator
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。所以该迭代器对象是在容器中进行内部实现的。对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法。Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
- 用于遍历Collection
- hasNext:后面是否还有元素
- next:指向并返回下一个元素
List
- 特点:存取有序,可重
- 特性
add(int,Object):在指定位置添加元素
add(int,Collection):在制定位置添加一组元素
get(int):获取指定位置的元素
remove(int):删除指定位置的元素,并返回
set(int,Object):修改指定位置的元素,返回修改前的元素
subList(int,int):返回指定范围的子集 - 遍历:及支持Collection的Iterator遍历,也支持用for+size+get遍历
- ListIterator:Iterator的子类
使用list.listIterator()返回一个ListIterator对象
hasPrevious():前面是否还有元素
previous():指向并返回上一个元素
在使用该类对象遍历List过程中,如需修改list需使用该类的方法。
add(Object):在当前位置后添加一个元素
List的三个实现类
ArrayList
- 底层数据结构是数组,查询快,增删慢
- 线程不安全,效率高
- contains()方法的实现为遍历并判断equals()
- 在使用Iterator遍历过程中修改list,list会被修改,但下一次调用Iterator的next会报错。
- foreach原理也是Iterator,因此在foreach中修改list也会初上上述情况
- 数组转集合:
List<String> list = ArrayList.asList("t","e","s","t");
。注意转换后的list长度不可变!即允许修改但不许增删。
Vector
- 底层数据结构是数组,查询快,增删慢
- 线程安全,效率低
- addElement(Object):被add()取代
- elementAt(int):被get()取代
- elements():被iterator()取代
- Enumeration:被Iterator取代
LinkedList
- 底层数据结构是链表,查询慢,增删快
- 线程不安全,效率高
- addFirst(Object):在开头添加(列表为空抛异常)
- offerFirst(Object):在开头添加(列表为空返回null)
- addLast(Object):在结尾添加(列表为空抛异常)
- offerLast(Object):在结尾添加(列表为空返回null)
- getFirst():获取开头元素(列表为空抛异常)
- peekFirst():获取开头元素(列表为空返回null)
- getLast():获取结尾元素(列表为空抛异常)
- peekLast():获取结尾元素(列表为空返回null)
- removeFirst():获取并删除开头元素(列表为空抛异常)
- poolFirst():获取并删除开头元素(列表为空返回null)
- removeLast():获取并删除结尾元素(列表为空抛异常)
- poolLast():获取并删除结尾元素(列表为空返回null)
Set
- 存取无序,不包含重复元素
- 支持foreach 不支持for
HashSet
底层数据结构是哈希表
- add步骤(HashMap的put()方法)
主要通过hashCode()和equals()方法来判断是否重复
自定义类可通过IDE快捷键生成hashCode()和equals()方法
LinkedHashSet
底层数据结构是哈希表和链表
- 保证存取有序和唯一性
TreeSet
按照某种规则进行排序(自然排序或比较器Comparator
排序)
- add步骤(TreeMap的put()方法)
- 存放自定义类,该类必须(实现Comparable接口 或 在TreeSet构造方法中传入Comparator对象)
如何选择使用?
- 可重复:需要线程安全:
Vector
- 可重复:不需要线程安全:查询多:
ArrayList
(最常用List
,最常用Collection
) - 可重复:不需要线程安全:增删多:
LinkedList
- 不重复:不排序:
HashSet
(最常用Set
) - 不重复:要排序:
TreeSet
- 最常用:
ArrayList
Map
Map
是顶层接口,与Colletion
无关
1. 特性
- 存储键值对,键不可重复且只能映射到一个值。
- Map的数据结构针对键
- 键存取无序
1. 功能
- 添加
put(K key,V value);添加一个键值对(若key已存在则更新value并返回旧value;否则添加键值对并返回null)
- 删除
clear();清除所有键值对
remove(K);根据key删除元素,并返回value
- 判断
containsKey(Object);Key中是否包含元素
containsValue(Object);Value中是否包含元素
isEmpty();是否为空
- 获取
Set
HashMap
主要通过hashCode()和equals()方法来判断key是否重复
- 线程不安全,效率高
- 允许null键,null值
LinkedHashMap
底层实现为哈希表和链表,保证key唯一且存取有序
TreeMap
底层实现为红黑树,保证key唯一且可排序
Hashtable
注意talbe
的t
小写
- 线程安全,效率低
- 不允许null
键,null
值
Collections
针对集合进行操作的工具类,public方法均为static
常用方法:
- sort()排序。支持自然排序和比较器排序
- binarySearch()二分查找
- max()最大值
- reverse()反转
- shuffle()随机置换(扑克洗牌)