1.集合构架关系
集合构架:
java的集合构架是一些封装好的数据结构,可以用来保存大量的,成组的数据,主要是Java.util.*包下面。
Collection接口是集合的根接口,有三个重要的子接口,Set(规则集),List(线性表),Map(键值对)。
Tables | Are |
---|---|
Set | 存储元素不能重复 |
List | 存储元素可以重复 |
Map | 键不能重复 |
2.迭代器Iterator和比较器接口Comparator
1.Iterator迭代器
Iterator是在集合构架中用来遍历集合的工具类,可以从 集合.iterator() 获得。
- 通过next()获得集合中下一个元素
- 通过hasNext()检查集合中是否还有元素
- 通过remove()讲集合中的元素删除
List的实现类还有自己独有的ListIterator,可以实现从两个方向遍历List,也可以从List中插入和删除元素(List也可以使用Iterator)
- hasNext():以正向遍历列表时,如果列表迭代器后面还有元素,则返回 true,否则返回false
- next():返回列表中ListIterator指向位置后面的元素
- hasPrevious():如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false
- hasPrevious():如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false
- add(E e): 将指定的元素插入列表,插入位置为迭代器当前位置之前
- remove():从列表中删除next()或previous()返回的最后一个元素
- nextIndex():返回列表中ListIterator所需位置后面元素的索引
- previousIndex():返回列表中ListIterator所需位置前面元素的索引
- set(E e):从列表中将next()或previous()返回的最后一个元素返回的最后一个元素更改为指定元素e
2.Comparator比较器接口
1.Comparable 接口
Comparable接口是排序接口,实现了该接口的类就意味着“支持排序”,存储对象为该类的List可以通过Collections.sort()排序,该类也可以作为TreeSet和TreeMap的对象存储而不需要再指定比较器。
Compatable接口的定义里只有一个函数,必须实现这个compareTo函数,返回的int值,负数小,0相等,正数大。
package java.lang;
import java.util.*;
public interface Comparable<T> {
public int compareTo(T o);
}
2.Comparator 接口
我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序,相当于“外部比较器”,即,没有实现Comparable接口的类需要比较时,传入一个实现Comparator接口的比较器即可。
Comparator 接口必须实现compare函数,equals函数可以不实现。compare函数返回的int值,负数小,0相等,正数大。
package java.util;
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
3.Set
set是存储不重复的无索引的集合,插入快,查询慢,底层用HashMap实现。
类 | 有无顺序 |
---|---|
HashSet | 元素没有顺序 |
LinkedHashSet | 按照插入顺序存储 |
TreeSet | 按照元素的自然顺序(需要实现Comparable接口或者添加一个Comparator比较器)存储 |
4.List
类 | 特点 |
---|---|
ArrayList | 数组实现,只在末尾插入和删除效率高 |
LinkedList | 链表实现,在任意地方插入和删除效率高 |
Vector | 线程安全,不涉及线程同步最好不用 |
Stack | 栈,push()入栈,pop()出栈,peek()返回栈顶元素不删除 |
5.Map
Map是键值对,键不能重复,键值可以是任意对象。
类 | 有无顺序 |
---|---|
HashMap | 元素没有顺序 |
LinkedHashMap | 按照插入顺序(无参)或者访问顺序(有参)存储 |
TreeSet | 按照键的的自然顺序(需要实现Comparable接口或者添加一个Comparator比较器)存储 |
6.Collections类
Collections是一个工具类,包含了很多静态方法,大部分是用来处理List的。
1.排序操作(主要针对List接口相关)
- reverse(List list):反转指定List集合中元素的顺序
- reverse(List list):反转指定List集合中元素的顺序
- shuffle(List list):对List中的元素进行随机排序(洗牌)
- sort(List list):对List里的元素根据自然升序排序
- sort(List list, Comparator c):自定义比较器进行排序
- swap(List list, int i, int j):将指定List集合中i处元素和j出元素进行交换
- rotate(List list, int distance):将所有元素向右移位指定长度,如果distance等于size那么结果不变
查找和替换(主要针对Collection接口相关)
- binarySearch(List list, Objectkey):使用二分搜索法,以获得指定对象在List中的索引,前提是集合已经排序
- max(Collection coll):返回最大元素
- max(Collection coll, Comparator comp):根据自定义比较器,返回最大元素
- min(Collection coll, Comparator comp):根据自定义比较器,返回最小元素
- fill(List list, Object obj):使用指定对象填充
- frequency(Collection Objecto):返回指定集合中指定对象出现的次数
其他
- disjoint(Collection< ?> c1, Collection< ?> c2) - 如果两个指定 collection 中没有相同的元素,则返回 true。
- addAll(Collection< ? super T> c, T… a) - 一种方便的方式,将所有指定元素添加到指定 collection 中。示范: Collections.addAll(flavors, “Peaches ‘n Plutonium”,
“Rocky Racoon”);