Java(Collection集合体系,常用API、集合遍历方式、存储自定义类型的集合)
集合 (容器)& 数组(容器):
- 数组定义完成并启动后,类型确定、长度固定;在进行数据增删及元素数据个数不确定的时候,以及元素移位时是不方便的;适合做元素类型固定、个数确定的业务。
- 集合是Java中存储对象数据的容器,大小不固定,可以动态变化,类型也可以不固定,类似于气球,可大可小,适合做增删业务;注:集合只能存储引用数据类型,存储基本数据类型的时候需要使用与之对应的包装类。
- Collection集合常用API:
示例运行结果:
Collection集合的遍历方式:
- 1、迭代器(Iterator):
1 import java.util.ArrayList;
2 import java.util.Collection;
3 import java.util.Iterator;
4
5 public class CollectionDemo1 {
6 public static void main(String[] args) {
7 Collection<String> c = new ArrayList<>();
8 c.add("扬");
9 c.add("帆");
10 c.add("起");
11 c.add("航");
12 System.out.println(c);
13
14 //得到当前集合地迭代器对象
15 Iterator<String> iterator = c.iterator();
16 while (iterator.hasNext())
17 {
18 System.out.println(iterator.next());
19 }
20 //System.out.println(iterator.next()); //NoSuchElementException异常,迭代器不能越界访问
21 }
22 }
示例运行结果:
- 2、foreach/增强for循环:
1 import java.util.ArrayList;
2 import java.util.Collection;
3
4 public class CollectionDemo2 {
5 public static void main(String[] args) {
6 Collection<String> c = new ArrayList<>();
7 c.add("走");
8 c.add("南");
9 c.add("闯");
10 c.add("北");
11 System.out.println(c);
12 System.out.println("------------");
13 for (String eachElemnet:c) {
14 System.out.println(eachElemnet);
15 }
16 System.out.println("------遍历数组-----------");
17 double[] scores = {59.5,65.5,78,95}; // 数组名.for + 回车
18 for (double score : scores) {
19 System.out.println(score);
20 if(score == 59.5){
21 score = 60; //无意义,score只是一个接收集合元素的变量,并不能操作集合内的元素
22 }
23 }
24 System.out.println(Arrays.toString(scores));
25 }
26 }
示例运行结果:
- JDK8之后:Lambda表达式:
1 import java.util.ArrayList;
2 import java.util.Collection;
3 import java.util.function.Consumer;
4
5 public class CollectionDemo3 {
6 public static void main(String[] args) {
7 Collection<String> c = new ArrayList<>();
8 c.add("生于");
9 c.add("忧患");
10 c.add("死于");
11 c.add("安乐");
12 System.out.println(c);
13 System.out.println("-------foreach-------");
14 for (String s : c) {
15 System.out.println(s);
16 }
17 System.out.println("-------匿名内部类--------");
18 c.forEach(new Consumer<String>() {
19 @Override
20 public void accept(String s) {
21 System.out.println(s);
22 }
23 });
24 System.out.println("---------Lambda简化---------");
25 // c.forEach(s ->{
26 // System.out.println(s);
27 // });
28 c.forEach(s -> System.out.println(s));
29 //拓展:
30 //c.forEach(System.out::println);
31 }
32 }
示例运行结果:
- 案例:影片信息在程序中的表示:
- 某影院需要在后台存储三部电影,然后依次展示出来
1 //定义一个电影类
2 public class Movie {
3 private String movieName;
4 private double score;
5 private String actor;
6
7 //打印对象内容则重写toString方法
8 @Override
9 public String toString() {
10 return "Movie{" +
11 "movieName='" + movieName + '\'' +
12 ", score=" + score +
13 ", actor='" + actor + '\'' +
14 '}';
15 }
16
17 public Movie() {
18 }
19
20 public Movie(String movieName, double score, String actor) {
21 this.movieName = movieName;
22 this.score = score;
23 this.actor = actor;
24 }
25
26 public String getMovieName() {
27 return movieName;
28 }
29
30 public void setMovieName(String movieName) {
31 this.movieName = movieName;
32 }
33
34 public double getScore() {
35 return score;
36 }
37
38 public void setScore(double score) {
39 this.score = score;
40 }
41
42 public String getActor() {
43 return actor;
44 }
45
46 public void setActor(String actor) {
47 this.actor = actor;
48 }
49 }
1 import java.util.ArrayList;
2 import java.util.Collection;
3
4 //测试类
5 public class Test {
6 public static void main(String[] args) {
7 //创建集合对象(多态写法)
8 Collection<Movie> movies = new ArrayList<>();
9 //向集合中添加元素
10 movies.add(new Movie("《战狼2》",9.5,"吴京"));
11 movies.add(new Movie("《我不是药神》",9.6,"徐峥、周一围、王传君"));
12 movies.add(new Movie("《肖生客的救赎》",10,"蒂姆·罗宾斯、摩根·弗里曼"));
13 //遍历集合
14 movies.forEach(str ->{
15 System.out.println("片名:" + str.getMovieName());
16 System.out.println("评分:" + str.getScore());
17 System.out.println("主演:" + str.getActor());
18 System.out.println("*************************");
19 });
20 for (Movie movie:movies) {
21 System.out.println(movie);
22 System.out.println("----------------");
23 }
24 }
25 }
示例运行结果:
内存原理:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现