Java基础-数组和集合(一)

一、集合的特点

1.1集合的特点

集合和数组类似,都是容器。为什么用集合?

数组的特点
1)数组定义完成并启动后,类型确定、长度固定。
2)不适合元素的个数和类型不确定的业务场景,更不适合做需要增删数据操作。
3)数组的功能也比较的单一,处理数据的能力并不是很强大。

集合的特点
1)集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。
2)集合非常适合元素个数不能确定,且需要做元素的增删操作的场景。
3)同时,集合提供的种类特别的丰富,功能也是非常强大的,开发中集合用的更多。

1.2总结

总结:
1、数组和集合的元素存储的个数问题。
数组定义后类型确定,长度固定。集合类型可以不固定,大小是可变的。

2、数组和集合存储元素的类型问题。
数组可以存储基本类型和引用类型的数据。集合只能存储引用数据类型的数据。

3、数组和集合适合的场景
数组适合做数据个数和类型确定的场景。集合适合做数据个数不确定,且要做增删元素的场景,集合种类更多,功能更强大。

二、集合类体系结构

2.1集合类体系结构

Collection单列集合,每个元素(数据)只包含一个值。
Map双列集合,每个元素包含两个值(键值对)。

在这里插入图片描述

2.2Collection集合体系

Collection集合体系:

在这里插入图片描述
Collection集合特点
List系列集合:添加的元素是有序、可重复、有索引。
ArrayList、LinekdList :有序、可重复、有索引。
Set系列集合:添加的元素是无序、不重复、无索引。
HashSet: 无序、不重复、无索引;LinkedHashSet: 有序、不重复、无索引。
TreeSet:按照大小默认升序排序、不重复、无索引。

2.3泛型

泛型:
集合都是泛型的形式,可以在编译阶段约束集合只能操作某种数据类型

Collection<String> lists = new ArrayList<String>();
Collection<String> lists = new ArrayList<>();

注意:集合和泛型都只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象。

Collection<int> lists = new ArrayList<>();//这个是错误的

如果集合中要存储基本类型的数据怎么办?

// 存储基本类型使用包装类
Collection<Integer> lists = new ArrayList<>();
Collection<Double> lists = new ArrayList<>();

2.4总结

1、集合的代表是?
Collection接口。

2、Collection集合分了哪2大常用的集合体系?
List系列集合:添加的元素是有序、可重复、有索引。
Set系列集合:添加的元素是无序、不重复、无索引。

3、如何约定集合存储数据的类型,需要注意什么?
集合支持泛型。集合和泛型不支持基本类型,只支持引用数据类型。

三、Collection集合常用API

Collection集合 :Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。

Collection API如下:
在这里插入图片描述

四、Collection集合的遍历方式

4.1迭代器

迭代器遍历概述:
遍历就是一个一个的把容器中的元素访问一遍。
迭代器在Java中的代表是Iterator,迭代器是集合的专用的遍历方式。

Collection集合获取迭代器:

在这里插入图片描述

Iterator中的常用方法:
在这里插入图片描述

代码:

		ArrayList<String> lists = new ArrayList<>();
        lists.add("赵敏");
        lists.add("小昭");
        lists.add("素素");
        lists.add("灭绝");
        System.out.println(lists);
        // [赵敏, 小昭, 素素, 灭绝]

        // 1、得到当前集合的迭代器对象。
        Iterator<String> it = lists.iterator();

        // 2、定义while循环
        while (it.hasNext()){
    
    
            String ele = it.next();
            System.out.println(ele);
        }

迭代器执行流程:
在这里插入图片描述
总结:
1、迭代器的默认位置在哪里。Iterator iterator():得到迭代器对象,默认指向当前集合的索引0

2、迭代器如果取元素越界会出现什么问题。会出现NoSuchElementException异常。

4.2foreach/增强for循环

增强for循环:

for(元素数据类型 变量名 : 数组或者Collection集合) {
    
    
         //在此处使用变量即可,该变量就是元素
}

增强for循环:既可以遍历集合也可以遍历数组。

        Collection<String> lists = new ArrayList<>();
        lists.add("赵敏");
        lists.add("小昭");
        lists.add("殷素素");
        lists.add("周芷若");
        System.out.println(lists);
        // [赵敏, 小昭, 殷素素, 周芷若]

        for (String ele : lists) {
    
    
            System.out.println(ele);
        }

增强for修改变量,修改第三方变量的值不会影响到集合中的元素
在这里插入图片描述

总结:
1.增强for可以遍历哪些容器?既可以遍历集合也可以遍历数组。

2、增强for的关键是记住它的遍历格式

4.3lambda表达式

Lambda表达式遍历集合:得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

Collection结合Lambda遍历的API
在这里插入图片描述
在这里插入图片描述
代码:

	Collection<String> lists = new ArrayList<>();
	lists.add("赵敏");
	lists.add("小昭");
	lists.add("殷素素");
	lists.add("周芷若");
	System.out.println(lists);
	// [赵敏, 小昭, 殷素素, 周芷若]

	lists.forEach(new Consumer<String>() {
    
    
    	@Override
    	public void accept(String s) {
    
    
        System.out.println(s);
    	}
	});
	lists.forEach(System.out::println );

五、Collection集合存储自定义类型的对象

5.1需求

需求:某影院系统需要在后台存储上述三部电影,然后依次展示出来。
分析:
1):定义一个电影类,定义一个集合存储电影对象。
2):创建3个电影对象,封装相关数据,把3个对象存入到集合中去。
3):遍历集合中的3个对象,输出相关信息。

电影类代码:

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;
    }

    @Override
    public String toString() {
    
    
        return "Movie{" +
                "name='" + name + '\'' +
                ", score=" + score +
                ", actor='" + actor + '\'' +
                '}';
    }
}

代码:

import java.util.ArrayList;
import java.util.Collection;

public class TestDemo {
    
    
    public static void main(String[] args) {
    
    
        // 1、定义一个电影类
        // 2、定义一个集合对象存储3部电影对象
        Collection<Movie> movies = new ArrayList<>();
        movies.add(new Movie("《你好,李焕英》", 9.5, "张小斐,贾玲,沈腾,陈赫"));
        movies.add(new Movie("《唐人街探案》", 8.5, "王宝强,刘昊然,美女"));
        movies.add(new Movie("《刺杀小说家》",8.6, "雷佳音,杨幂"));

        System.out.println(movies);

        // 3、遍历集合容器中的每个电影对象
        for (Movie movie : movies) {
    
    
            System.out.println("片名:" + movie.getName());
            System.out.println("得分:" + movie.getScore());
            System.out.println("主演:" + movie.getActor());
        }

    }
}

运行结果:

在这里插入图片描述

5.2总结

集合对象存储底层原理:
在这里插入图片描述
1、集合中存储的是元素的什么信息?集合中存储的是元素对象的地址。

猜你喜欢

转载自blog.csdn.net/kong7906928/article/details/146537801
今日推荐