集合体系概述
集合体系结构
- Collection代表单列集合,每个元素(数据)只包含一个值。
- Map代表双列集合,每个元素包含两个值(键值对)。
Collection集合体系
Collection集合特点
- List系列集合:添加的元素是有序、可重复、有索引。
- ArrayList、LinkedList:有序、可重复、有索引。
- Set系列集合:添加的元素是无序、不重复、无索引。
- HashSet:无序、不重复、无索引。
- LinkedHashSet:有序、不重复、无索引。
- TreeSet:按照大小默认升序排序、不重复、无索引。
Collection的常用方法
- Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。
方法名 | 说明 |
---|---|
public boolean add(E e) | 添加元素,添加成功返回true |
public void clear() | 清空集合的元素 |
public boolean isEmpty() | 判断集合是否为空,为空返回true,反之 |
public int size() | 获取集合的大小 |
public boolean contains(Obijec obj) | 判断集合是否包含某个元素 |
public boolean remove(E e) | 删除某个元素:如果有多个重复元素默认删除前面的第一个 |
public Object[] toArray() | 把集合转换成数组 |
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<>(); // 多态写法
// public boolean add(E e) 添加元素,添加成功返回true
c.add("java1");
c.add("java2");
c.add("java2");
c.add("java3");
System.out.println(c);
// public void clear() 清空集合的元素
c.clear();
System.out.println(c);
// public boolean isEmpty() 判断集合是否为空,为空返回true,反之
System.out.println(c.isEmpty());
// public int size() 获取集合的大小
System.out.println(c.size());
// public boolean contains(Obijec obj) 判断集合是否包含某个元素
System.out.println(c.contains("java1"));
// public boolean remove(E e) 删除某个元素:如果有多个重复元素默认删除前面的第一个
c.remove("java1");
System.out.println(c);
// public Object[] toArray() 把集合转换成数组
Object[] arr = c.toArray();
System.out.println(Arrays.toString(arr));
System.out.println("----------------------------");
// 把一个集合中的全部数据倒入到另一个集合中去
Collection<String> c1 = new ArrayList<>();
c1.add("java1");
c1.add("java2");
Collection<String> c2 = new ArrayList<>();
c2.add("java3");
c2.add("java4");
c1.addAll(c2); //就是把c2中的数据全部倒入到c1中去,c2的内容不变
System.out.println(c1);
System.out.println(c2);
}
}
Collection的遍历方式
迭代器
- 迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。
Collection集合获取迭代器的方法
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("张三");
c.add("李四");
c.add("王五");
c.add("赵六");
Iterator<String> it = c.iterator();
while (it.hasNext()){
String ele = it.next();
System.out.println(ele);
}
}
}
增强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("张三");
c.add("李四");
c.add("王五");
c.add("赵六");
String[] arr = {"阿瓦","阿萨","斯特"};
for (String ele : c){
System.out.println(ele);
}
for (String ele2 : arr){
System.out.println(ele2);
}
}
}
Lambda表达式
Lambda表达式遍历集合
- 得益于JDK 8 开始的新技术Lambda表达式,提供了一种更简单、更直接的方式来遍历集合。
需要使用Collection的如下方法来完成
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("张三");
c.add("李四");
c.add("王五");
c.add("赵六");
// c.forEach(new Consumer<String>() {
// @Override
// public void accept(String s) {
// System.out.println(s);
// }
// });
//
// c.forEach((String s) -> {
// System.out.println(s);
// });
//
// c.forEach( s -> System.out.println(s));
c.forEach(System.out::println);
}
}
案例:遍历集合中的自定义对象
需求:展示多部电影信息
Movie类
public class Movie {
private String name;
private double score;
private String actor;
public Movie() {
}
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
Test类
import java.util.ArrayList;
import java.util.Collection;
public class Test {
public static void main(String[] args) {
Collection<Movie> movies = new ArrayList<>();
movies.add(new Movie("阿甘正传",9.5,"汤姆·汉克斯"));
movies.add(new Movie("霸王别姬",9.6,"张国荣、张丰毅"));
movies.add(new Movie("肖申克的救赎",9.7,"罗宾斯"));
for (Movie movie : movies) {
System.out.println("电影名:" + movie.getName());
System.out.println("评分:" + movie.getScore());
System.out.println("主演:" + movie.getActor());
System.out.println("-------------------------------");
}
}
}