集合体系结构
Collection 代表单列集合,每个元素(数据)只包含一个值
Map 代表双列集合,每个元素包含两个值(键值对)
Collection 框架集合
Collection 概述
List 系列集合:添加的元素是有序、可重复、有索引
- ArrayList、LinekdList:有序、可重复、有索引
Set 系列集合:添加的元素是无序、不重复、无索引
- HashSet:无序、不重复、无索引
- LinkedHashSet:有序、不重复、无索引
- TreeSet:按照大小默认升序排序、不重复、无索引
Collection 常用方法
Collection 是单列集合的祖宗,它的方法是全部单列集合都会继承的
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class Test {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>(); // 多态写法
// 1. 添加元素,添加成功返回true
c.add("java1");
c.add("java1");
c.add("java2");
c.add("java2");
c.add("java3");
System.out.println(c); // [java1, java1, java2, java2, java3]
// 2. 清空集合的元素
// c.clear();
// 3. 判断集合是否为空
System.out.println(c.isEmpty()); // false
// 4. 获取集合的大小
System.out.println(c.size()); // 5
// 5. 判断集合中是否包含某个元素
System.out.println(c.contains("java1")); // true
// 6. 删除某个元素:如果有多个重复元素默认删除最前面的第一个
System.out.println(c.remove("java1")); // true
System.out.println(c); // [java1, java2, java2, java3]
// 7. 把集合转换为数组
Object[] arr = c.toArray();
System.out.println(Arrays.toString(arr)); // [java1, java2, java2, java3]
String[] arr2 = c.toArray(new String[c.size()]);
System.out.println(Arrays.toString(arr)); // [java1, java2, java2, java3]
// 8. 把一个集合的全部数据倒入到另一个集合中去
Collection<String> c1 = new ArrayList<>();
c1.add("java11");
c1.add("java22");
Collection<String> c2 = new ArrayList<>();
c2.add("java33");
c2.add("java44");
c1.addAll(c2);
System.out.println(c1); // [java11, java22, java33, java44]
System.out.println(c2); // [java33, java44]
}
}
Collection 的遍历方式
迭代器
迭代器是用来遍历集合的专用方式(数组没有迭代器),在 Java 中迭代器的代表是 Iterator
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
c.add("Jack");
c.add("Peter");
c.add("Tomato");
c.add("wang");
System.out.println(c); // [Jack, Peter, Tomato, wang]
// 使用迭代器遍历集合
// 1. 从集合对象中获取迭代器对象
Iterator<String> iter = c.iterator();
// System.out.println(iter.next()); // Jack
// System.out.println(iter.next()); // Peter
// System.out.println(iter.next()); // Tomato
// System.out.println(iter.next()); // wang
// System.out.println(iter.hasNext()); // 判断当前迭代位置是否有元素存在 false
// System.out.println(iter.next()); // 出现异常 NoSuchElementException
// 2. 结合循环与迭代器,进行集合的遍历
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
增强 for
"增强for"可以用来遍历集合或者数组,"增强for"遍历集合,本质就是迭代器遍历集合的简化写法
import java.util.ArrayList;
import java.util.Collection;
public class Test {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
c.add("Jack");
c.add("Peter");
c.add("Tomato");
c.add("wang");
System.out.println(c); // [Jack, Peter, Tomato, wang]
// 使用增强for遍历集合,或者遍历数组!!
for (String ele : c) {
System.out.println(ele);
}
int[] arr = {1, 2, 3, 4, 5};
for (int num : arr) {
System.out.println(num);
}
}
}
lambda 表达式
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
public class Test {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
c.add("Jack");
c.add("Peter");
c.add("Tomato");
c.add("wang");
System.out.println(c); // [Jack, Peter, Tomato, wang]
// 方式一(未经过简化)
c.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
// 方式二(lambda简化版)
// c.forEach(s -> System.out.println(s));
c.forEach(System.out::println);
}
}