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 }

示例运行结果:

 

 内存原理:

 

posted @ 2022-05-08 00:58  羽梦齐飞  阅读(49)  评论(0编辑  收藏  举报