Java中的集合

目录

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

1、数组的特点:

2、集合的特点:

二、集合的体系特点

1、集合类体系结构

2、Collection集合体系

3、泛型

三、Collection集合常用API

1、Collection集合

2、Collection API

四、Collection集合的遍历方式

1、方式一:迭代器

1.1、迭代器遍历概述

1.2、Collection集合获取迭代器

1.3、Iterator中的常用方法

1.4、代码

1.5、结果展示

2、方式二:for each/增强for循环

1.1、增强for可以遍历哪些容器?

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

1.3、代码

1.4、结果展示

3、方式三:lambda表达式

3.1、Lambda表达式遍历集合

3.2、Collection结合Lambda遍历的API

3.3、代码

3.4、结果展示

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

1、需求

2、分析

3、代码

4、结果展示


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

1、数组的特点:

a.数组定义完成并启动后,类型确定、长度固定。

b.不适合元素的个数和类型不确定的业务场景,更不适合做需要增删数据操作。

c.数组的功能也比较的单一,处理数据的能力并不是很强大。

2、集合的特点:

a.集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。

b.集合非常适合元素个数不能确定,且需要做元素的增删操作的场景。

c.集合提供的种类特别的丰富,功能也是非常强大的,开发中集合用的更多。

二、集合的体系特点

1、集合类体系结构

a.Collection单列集合:每个元素(数据)只包含一个值。

b.Map双列集合:每个元素包含两个值(键值对)。

2、Collection集合体系

a.List系列集合:添加的元素是有序、可重复、有索引。

ArrayList、LinekdList :有序、可重复、有索引。

b.Set系列集合:添加的元素是无序、不重复、无索引。

HashSet: 无序、不重复、无索引。

LinkedHashSet: 有序、不重复、无索引。

TreeSet:按照大小默认升序排序、不重复、无索引。

3、泛型

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

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

Collection<String> lists = new ArrayList<>(); // JDK 1.7开始后面的泛型类型申明可以省略不写

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

三、Collection集合常用API

1、Collection集合

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

2、Collection API

方法名称

说明

public boolean add(E e)

把给定的对象添加到当前集合中 

public void clear() 

清空集合中所有的元素

public boolean remove(E e)

把给定的对象在当前集合中删除

public boolean contains(Object obj)

判断当前集合中是否包含给定的对象

public boolean isEmpty()

判断当前集合是否为空

public int size()

返回集合中元素的个数。

public Object[] toArray()

把集合中的元素,存储到数组中

四、Collection集合的遍历方式

1、方式一:迭代器

1.1、迭代器遍历概述

a.遍历就是一个一个的把容器中的元素访问一遍。

b.迭代器在Java中的代表是Iterator,迭代器是集合的专用的遍历方式。

1.2、Collection集合获取迭代器

方法名称

说明

Iterator<E> iterator()

返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引

1.3、Iterator中的常用方法

方法名称

说明

boolean hasNext()

询问当前位置是否有元素存在,存在返回true ,不存在返回false

E next()

获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。 

1.4、代码

public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("小王");
        c.add("小丁");
        c.add("小陈");
        c.add("小李");
        System.out.println(c);
        Iterator<String> i = c.iterator();
        while (i.hasNext()){
            String s = i.next();
            System.out.println(s);
        }
    }

1.5、结果展示

2、方式二:for each/增强for循环

1.1、增强for可以遍历哪些容器?

既可以遍历集合也可以遍历数组。

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

for(元素数据类型 变量名 : 数组或者Collection集合) {

         //在此处使用变量即可,该变量就是元素

}

1.3、代码

public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("小王");
        c.add("小丁");
        c.add("小陈");
        c.add("小李");
        System.out.println(c);

        System.out.println("----------遍历集合----------");
        for (String s : c) {
            System.out.println(s);
        }

        System.out.println("----------遍历数组----------");
        double[] scores = {100, 99, 56, 59.2};
        for (double s : scores) {
            System.out.println(s);
//            if(s == 56){
//                s = 100;    //修改无意义 ,不会改变数组中的值(人家数组该是多少还是多少!!)
//            }
        }
        System.out.println(Arrays.toString(scores));
    }

1.4、结果展示

3、方式三:lambda表达式

3.1、Lambda表达式遍历集合

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

3.2、Collection结合Lambda遍历的API

方法名称

说明

default void forEach(Consumer<? super T> action): 

结合lambda遍历集合

3.3、代码

public static void main(String[] args) {
        Collection<String> c = new ArrayList<>();
        c.add("小王");
        c.add("小丁");
        c.add("小陈");
        c.add("小李");
        System.out.println(c);
        c.forEach(System.out::println);
    }

3.4、结果展示

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

1、需求

某影院系统需要在后台存储上述三部电影,然后依次展示出来。

2、分析

a:定义一个电影类,定义一个集合存储电影对象。

b:创建3个电影对象,封装相关数据,把3个对象存入到集合中去。

c:遍历集合中的3个对象,输出相关信息。

3、代码

3.1、实体类

public class Movie {
    private String name;
    private Double grade;
    private String actor;

    public Movie() {
    }

    public Movie(String name, Double grade, String actor) {
        this.name = name;
        this.grade = grade;
        this.actor = actor;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getGrade() {
        return grade;
    }

    public void setGrade(Double grade) {
        this.grade = grade;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }
}

3.2、主程序

public static void main(String[] args) {
        //1、定义一个电影类

        //2、定义一个集合对象存储三部电影
        ArrayList<Movie> movies = new ArrayList<>();
        movies.add(new Movie("《你好,李焕英》",9.5,"小张"));
        movies.add(new Movie("《唐人街探案》",8.5,"小王"));
        movies.add(new Movie("《刺杀小说家》",8.6,"小雷"));

        //3、遍历出集合中的对象
        for (Movie movie : movies) {
            System.out.println(movie.getName());
            System.out.println(movie.getGrade());
            System.out.println(movie.getActor());
        }
    }

4、结果展示

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁༺๑小王不是程序员๑༻꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值