Collection集合(一)

Collection集合
预备知识
什么是集合?

集合和数组类似,都是容器。

集合与数组的区别

集合:

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

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

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

数组:

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

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

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

数组集合
元素存储个数类型确定,长度固定类型可以不固定,大小是可变的
存储元素的类型可以存储基本类型和引用类型的数据只能存储引用数据类型的数据
适合的场景适合做数据个数和类型确定的场景适合做数据个数不确定,且要做增删元素的场景,集合种类更多,功能更强大
集合类体系结构:

集合分为Collection(单列)和Map(双列);

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

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

注意:前期先掌握Collection集合体系的使用。

Collection集合体系:
在这里插入图片描述

Collection集合特点:

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

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

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

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

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

Collection集合对泛型的支持

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

正确示例:

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

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

所以这种写法是错误的

错误示例:

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

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

我们需要利用包装类,将基本数据类型变成引用数据类型

正确示例:

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

Collection集合常用API

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()把集合中的元素,存储到数组中

示例1:建一个CollectionDemo01类,练习这些API

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

public class CollectionDemo01 {
    public static void main(String[] args) {
        Collection<String> list1 =  new ArrayList<>();
        Collection<String> list2 =  new ArrayList<>();
        list1.add("蔡徐坤");
        list1.add("小黑子");
        list1.add("真爱粉");
        list1.add("荔枝");
        list1.add("ikun");
        //将对象添加到集合中
        System.out.println(list1);
        System.out.println(list1.size());
        //返回集合中元素的个数
        System.out.println( list1.remove("小黑子"));
        System.out.println( list1.remove("鸡太美"));
        System.out.println(list1);
        //把给定的对象在当前集合中删除,如果没有给定的对象,将返回false,表示删除失败;返回true,表示删除成功。
        System.out.println(list1.size());
        //返回集合中元素的个数
        System.out.println(list1.contains("ikun"));
        System.out.println(list1.contains("鸡太美"));
        //判断当前集合中是否包含给定的对象
        System.out.println(list1.isEmpty());
        System.out.println(list2.isEmpty());
        //判断当前集合是否为空
        System.out.println(list1);
        System.out.println(list2);
        list1.clear();
        //清空集合中所有的元素
        System.out.println(list1);
        System.out.println(list2);


    }
}

运行结果:

[蔡徐坤, 小黑子, 真爱粉, 荔枝, ikun]
5
true
false
[蔡徐坤, 真爱粉, 荔枝, ikun]
4
true
false
false
true
[蔡徐坤, 真爱粉, 荔枝, ikun]
[]
[]
[]

补充:方法:public addAll(Collection<? extends E> c)

说明:将一个c集合放入一个集合,c集合本身不变;

示例2:

CollectionDemo02类

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

public class CollectionDemo02 {
    public static void main(String[] args) {
        Collection<String> c1 = new ArrayList<>();
        Collection<String> c2 = new ArrayList<>();
        c1.add("java");
        c1.add("c");
        c2.add("c++");
        c2.add("html");
        System.out.println(c1);
        System.out.println(c2);
        c1.addAll(c2);
        System.out.println(c1);
        System.out.println(c2);
    }
}

运行结果:

[java, c]
[c++, html]
[java, c, c++, html]
[c++, html]

Collection集合的遍历方式
方法一:迭代器遍历

迭代器遍历:

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

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

Collection集合获取迭代器
在这里插入图片描述

Iterator中的常用方法

方法名称说明
boolean hasNext()询问当前位置是否有元素存在,存在返回true ,不存在返回false
E next()获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。

示例3:给一个ArrayList集合,需要遍历。

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

public class CollectionDemo03 {
    public static void main(String[] args) {
        Collection<String> list1 = new ArrayList<>();
        list1.add("蔡徐坤");
        list1.add("小黑子");
        list1.add("真爱粉");
        list1.add("荔枝");
        list1.add("ikun");
        Iterator<String > t = list1.iterator();
        while (t.hasNext()){
            String s = t.next();
            System.out.println(s);
        }
        }

}

运行结果:

蔡徐坤
小黑子
真爱粉
荔枝
ikun

方法二:foreach/增强for循环

增强for循环的结构:

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

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

}

注意:增强for循环:既可以遍历集合也可以遍历数组。在IDEA中可以用 集合名/数组名+“.”+回车 快速生成。

示例四:CollectionDemo04类

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

public class CollectionDemo04 {
    public static void main(String[] args) {
        Collection<String> list1 = new ArrayList<>();

        Double[] d = {1.0, 3.7, 6.8, 9.0};
        list1.add("蔡徐坤");
        list1.add("小黑子");
        list1.add("真爱粉");
        list1.add("荔枝");
        list1.add("ikun");
        for (String ele : list1) {
            System.out.println(ele);
        }
        for (Double aDouble : d) {
            System.out.println(aDouble );
        }
    }
}

运行结果:

蔡徐坤
小黑子
真爱粉
荔枝
ikun
1.0
3.7
6.8
9.0

方法三:Lambda表达式遍历集合

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

Collection结合Lambda遍历的API

方法名称说明
default void forEach(Consumer<? super T> action):结合lambda遍历集合

示例五:CollectionDemo05类

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

public class CollectionDemo05 {
    public static void main(String[] args) {
        Collection<String> list1 = new ArrayList<>();
        list1.add("蔡徐坤");
        list1.add("小黑子");
        list1.add("真爱粉");
        list1.add("荔枝");
        list1.add("ikun");
        list1.forEach(s-> System.out.println(s));
    }
}

简化过程:
在这里插入图片描述

题目

需求

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

分析

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

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

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

答案:

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

public class test {
    public static void main(String[] args) {

        Collection<Movie> movies = new ArrayList<>();
        movies.add(new Movie("001",9.0,"a"));
        movies.add(new Movie("002",9.3,"b"));
        movies.add(new Movie("003",5.0,"c"));
      /*  Iterator t = movies.iterator();
        while(t.hasNext()){
            Object movie =t.next();
            Movie h =new Movie();
                   h= (Movie)movie;
            System.out.println("名字 "+h.getName());
            System.out.println("评分 "+h.getScore());
            System.out.println("演员 "+h.getActor());

        }*/
        //方法一
        /*for (Movie movie : movies) {
            System.out.println("名字 "+movie.getName());
            System.out.println("评分 "+movie.getScore());
            System.out.println("演员 "+movie.getActor());
        }*/
        //方法二
        movies.forEach(s->{
            System.out.println("名字 "+s.getName());
            System.out.println("评分 "+s.getScore());
            System.out.println("演员 "+s.getActor());
        });
        //方法三
    }
}

运行结果:

名字 001
评分 9.0
演员 a
名字 002
评分 9.3
演员 b
名字 003
评分 5.0
演员 c

问题:

1、数组和集合的元素存储的个数问题。

数组定义后类型确定,长度固定

集合类型可以不固定,大小是可变的。

2、数组和集合存储元素的类型问题。

数组可以存储基本类型和引用类型的数据。

集合只能存储引用数据类型的数据。

3、数组和集合适合的场景

数组适合做数据个数和类型确定的场景。

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

4、集合的代表是?

Collection接口。

5、Collection集合分了哪2大常用的集合体系?

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

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

6、如何约定集合存储数据的类型,需要注意什么?

集合支持泛型。

集合和泛型不支持基本类型,只支持引用数据类型。

7、迭代器的默认位置在哪里。

Iterator iterator():得到迭代器对象,默认指向当前集合的索引0

8、迭代器如果取元素越界会出现什么问题。

会出现NoSuchElementException异常。

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

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

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

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

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

}

11、集合中存储的是元素的什么信息?

集合中存储的是元素对象的地址。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值