JavaSE 集合
目录
- 集合是什么?有什么用?
- 集合怎么用?
- 1、集合的组成(常用部分)
- 2、Iterable 接口和 Iterator 接口
- 3、Collection 接口
- 4、Collections 类
- 5、不同集合的使用场景
集合是什么?有什么用?
Java 集合是用于存放数据的容器/工具。可以存放数量不确定的数据(与数组相比)。可以实现常用的数据结构,比如:线性表、链表、栈、队列、树等。
注意1:集合里只能保存对象,实际上是保存对象的引用变量。所以将对象添加到集合中后,如果对对象进行修改,集合中保存的该对象也会同步修改。
返回目录
集合怎么用?
1、集合的组成(常用部分)
(1)Java 集合常用的部分为:List 集合、Set 集合、Queue 集合、Map 集合。
List 集合是有序、元素可重复的集合,实现了线性表、链表等数据结构;
Set 集合是无序、元素不可重复的集合;
Queue 集合实现了队列(双端队列)、栈等数据结构。
Map 集合中的某一个元素,由具有映射关系的两个数据组成。
(2)其中 List、Set、Queue 都是 Collection 接口的子接口。
Collection 接口继承了 Iterable 接口,表示该接口可以通过迭代器进行遍历。
(3)还有一个工具类 Collections,封装了一些可以操作集合的静态方法。
2、Iterable 接口和 Iterator 接口
Collection 接口实现了Iterable 接口,Iterable 接口的功能有2个:
(1)实现该接口的类,可以使用迭代器进行遍历;
(2)实现该接口的类,可以使用 foreach 循环进行遍历。
public interface Iterable<T> {
// 返回一个迭代器对象
Iterator<T> iterator();
}
public static void main(String[] args) {
Collection<String> col = new ArrayList<>();
col.add("a");
col.add("b");
col.add("c");
//迭代器遍历
Iterator<String> it = col.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
// foreach 遍历
for (String s : col) {
System.out.println(s);
}
}
Iterator 接口(迭代器)常用的3个方法。
public interface Iterator<E> {
boolean hasNext();
E next();
default void remove() {...}
}
3、Collection 接口
Collection 接口是 List、Set、Queue 接口的父接口,定义了一些对集合的操作。
public interface Collection<E> extends Iterable<E> {
// 增:向集合中添加元素
boolean add(E e);
boolean addAll(Collection<? extends E> c);
// 删:从集合中删除指定的元素
boolean remove(Object o);
boolean removeAll(Collection<?> c);
void clear();
// 从当前集合中,删除集合c不包含的元素。相当于留下当前集合和集合c的交集。
boolean retainAll(Collection<?> c);
// 查:判断集合是否包含指定的元素
boolean contains(Object o);
boolean containsAll(Collection<?> c);
// 返回集合中元素的数量
int size();
// 判断集合是否为空
boolean isEmpty();
}
4、Collections 类
Collections 类是一个工具类,用于操作集合。以下是常用方法(静态方法)。
public class Collections {
// 1、排序操作
// 按照元素的自然顺序,进行升序排序
// 自然顺序:Comparable 接口的 compareTo() 方法。详见《JavaSE 比较器接口》
public static void sort(List list) {...}
// 按照指定顺序,进行排序
public static void sort(List list, Comparator c) {...}
// 反转集合顺序
public static void reverse(List list) {...}
// 随机排序(洗牌)
public static void shuffle(List list) {...}
// 交换元素顺序
public static void swap(List list, int i, int j) {...}
// 2、查找、替换
// 二分查找。使用该方法,必须保证 List 集合有序。
public static int binarySearch(List list, T key) {...}
// 查找最小元素
public static T min(Collection<? extends T> coll) {...}
public static T min(Collection coll, Comparator comp) {...}
// 查找最大元素
public static T max(Collectio coll) {...}
public static T max(Collectio coll, Comparato comp) {...}
// 用新值替换集合中的所有旧值
public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal) {...}
// 返回指定元素的出现次数。
public static int frequency(Collection c, Object o) {...}
// 使用指定元素,替换集合中的所有元素。
public static void fill(List list, T obj) {...}
// 3、同步控制
// 返回线程安全的集合对象
public static Collection synchronizedCollection(Collection c) {...}
public static List synchronizedList(List list) {...}
public static Set synchronizedSet(Set s) {...}
public static Map synchronizedMap(Map m) {...}
}
5、不同集合的使用场景
List:有序、元素可重复的集合
Set:无序、元素不可重复的集合
Map:具有映射关系的集合
Queue:队列