1.集合概述
定义
集合就是一个容器,一个能够动态增长长度的容器。我们可以把多个各种各样的存储对象放到这个容器中。取数组不同的是,数组只能同时存储一种相同类型的数据,并且数组长度也不是理想的,,数组长度一旦定义就无法改变。
集合给我们在实际应用当中起了很大作用。Java中对于各种数据结构的实现,就是我们用到的集合。
2.集合API
3.集合接口
(1)List
一个有序的集合,可以包含重复的元素。它允许我们精确控制每个元素插入的位置。你可以通过索引(位置)访问元素。ArrayList和LinkedList是List接口的两个主要实现。
(2)Set
一个不允许重复元素的集合。它可以用来去除集合中的重复元素。HashSet、LinkedHashSet和TreeSet是Set接口的主要实现。
(3)Map
一个存储键值对(key-value pairs)的对象。每个键最多只能映射到一个值。HashMap、Hashtable和TreeMap是Map接口的几个实现。
4.List接口迭代
方法一:用for循环遍历。
import java.util.ArrayList;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
// 遍历列表
for(String name : names) {
System.out.println(name);
}
}
}
方法二:迭代遍历
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
// 使用迭代器遍历列表
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {
String name = iterator.next();
System.out.println(name);
}
}
}
5.Set接口迭代
方法一:用for循环
import java.util.HashSet;
import java.util.Set;
public class SetExample {
public static void main(String[] args) {
Set<String> fruits = new HashSet<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Apple"); // 重复元素将被忽略
System.out.println(fruits.size()); // 输出元素数量,重复的"Apple"只计算一次
}
}
方法二:用迭代器遍历
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetExample {
public static void main(String[] args) {
Set<String> fruits = new HashSet<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Apple"); // 重复元素将被忽略
// 使用迭代器遍历Set
Iterator<String> iterator = fruits.iterator();
while (iterator.hasNext()) {
String fruit = iterator.next();
System.out.println(fruit);
}
// 输出元素数量,重复的"Apple"只计算一次
System.out.println(fruits.size());
}
}
6.Map接口及其实现类
Map概念:
将键映射到值的对象, 一个映射不能包含重复的键 ,每个键最多只能映射到一个值
Map实现类
(1)HashMap:
HashMap中元素的key值不能重复, 排列顺序是不固定的,可以存储一个为null的键
(2)TreeMap:TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序
的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。
(3)Hashtable:实现了同步。不能存储为null的键。
7.Map(双列)接口迭代
方法一:根据键找值, 获取所有键的集合 ,遍历键的集合,获取到每一个键 ,根据键找值
//方法一:先拿到所有键,遍历键,根据键找值
Set<String> keySet=hashMap.keySet();
for (String key:keySet) {
System.out.println(key+"="+hashMap.get(key));
}
方法二:
根据键值对对象找键和值 , 获取所有键值对对象的集合 ,遍历键值对对象的集合,获取到每一个键值对对象 ,根据键值对对象找键和值
//方法二:
Set<Map.Entry<String,String>> entries =hashMap.entrySet();
for (Map.Entry entry:entries) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
8.Collections类
是一个工具类,Collections是集合类的工具类,与数组的工具类Arrays类似.
addAl l(Collection<? super T> c, T... elements);
binarySearch(List<? extends Comparable<? super T>> l ist, T key)
sort(List<T> l ist)
sort(List<T> l ist, Comparator<? super T> c)
swap(List<?> l ist, int i, int j)
copy(List<? super T> dest, List<? extends T> src) ; 注意 dest size 需大于等于 src.size
fi l l(List<? super T> l ist, T obj)
max(Col lection<? extends T> col l)
min(Col lection<? extends T> col l)
replaceAl l(List<T> l ist, T oldVal, T newVal)
reverse(List<?> l ist)
shuffle(List<?> l ist) 随机排序
copy(dest,src) 集合复制