集合体系结构
集合是一种容器,用来存储对象信息
所有集合类都位于 java.util 包下,支持多线程的集合位于 java.util.concurrent 包下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kgTIr1vB-1631418503370)(M:\typora-img\image-20210908173245404.png)]
集合中有两个重要的根接口:Collection(单列)、Map(双列)
Collection
Collection 的子接口有:List、Set、Queue
List:元素有序、可重复、支持索引操作
- ArrayList:非线程安全;可扩容数组
- LinkedList:非线程安全;双向链表
- Vector:线程安全
Set:元素无序、不可重复、无索引
- HashSet:取出顺序固定;非线程安全
- TreeSet:自然顺序(可自定义)
- LinkedHashSet:有序(存储取出顺序一致)
常用方法
方法 | 说明 |
---|---|
boolean add(E e) | 添加一个元素 |
boolean addAll(Collection<? extends E> c) | 添加一个集合 |
void clear() | 清空集合 |
boolean contains(Object o) | 判断是否包含指定元素 |
boolean containsAll(Collection<?> c) | 判断是否包含指定集合 |
boolean equals(Object o) | 判断相等 |
int hashCode() | 返回集合的哈希码值 |
boolean isEmpty() | 判断是否为空 |
Iterator<E> iterator() | 返回集合的迭代器 |
boolean remove(Object o) | 删除指定元素 |
boolean removeAll(Collection<?> c) | 删除指定集合 |
boolean removeIf(Predicate<? super E> filter) | 删除满足谓词的元素 |
int size() | 返回元素个数 |
Object[] toArray() | 返回集合的元素数组 |
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("1");
collection.add("2");
collection.remove("1");
collection.remove(1);
boolean contains = collection.contains("1");
int size = collection.size();
boolean empty = collection.isEmpty();
collection.clear();
}
遍历
- 将集合转换为数组后遍历
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("1");
collection.add("2");
Object[] objects = collection.toArray();
for (Object object : objects) {
System.out.println(object);
}
}
- 使用迭代器遍历
- next:返回下一个元素
- hasNext:判断是否有下一个元素
- remove:删除集合里上一次 next 方法返回的元素
public static void main(String[] args) {
Collection<String> collection = new ArrayList<>();
collection.add("1");
collection.add("2");
// 获取迭代器
Iterator<String> iterator = collection.iterator();
// 遍历
while (iterator.hasNext()) {
String next = iterator.next();
System.out.println(next);
}
}
Map
Map 是双列集合,用来存储键值对
主要实现类:HashMap、HashTable、TreeMap
Collections
Collections 类是针对集合操作的工具类
方法 | 说明 |
---|---|
reverse(List<T> list) | 反转集合中的元素 |
sort(List<T> list) | 升序排序 |
shuffle(List<T> list) | 对 List 随机排序,即洗牌 |
sort(List<T> list, Comparator<? super T> c) | 根据指定的比较器对指定的列表进行排序 |
swap(List<?> list, int i, int j) | 交换 |
max(Collection coll) | 按自然顺序找最大 |
max(Collection coll, Comparator comp) | 按比较器的规则找最大 |
min(Collection coll) | 按自然顺序找最小 |
min(Collection coll, Comparator comp) | 按比较器的规则找最小 |
frequency(Collection<?> c, Object o) | 返回指定集合中与指定对象相等的元素数 |
copy(List<? super T> dest, List<? extends T> src) | 将所有元素从一个列表复制到另一个列表中 |
replaceAll(List<T> list, T oldVal, T newVal) | 将列表中一个指定值的所有出现替换为另一个 |
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Collections.sort(list);
Collections.reverse(list);
Collections.shuffle(list);
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, teger o2){
// int num = s1.getAge() - s2.getAge();
// int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
return o2 - o1; // 降序
}
})
}
集合与数组的区别
数组的长度是确定且不可更改的,集合可以进行动态扩容
数组只能存储同一类型的元素,集合可以存储多种类型的元素以及具有映射关系的键值对
数组可以存储基本类型,也可以存储引用类型;集合只能存储引用类型
Collection 与 Collections 的区别
Collection 是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,是 List、Set 的父接口
Collections 是一个工具类,它包含了很多静态方法,比如提供的排序方法 sort,不能被实例化