• Java----集合框架(Collection)、foreach的用法


    1.概述

                    集合:集合是iava中提供的一种容器,可以用来存储多个数据

            集合和数组既然都是容器,它们有啥区别呢?

                    数组长度固定的,集合长度可变的。

                    数组中存储的是同一类型的元素,可以存储基本数据类型值,也可以存储相同类的对象。

                    集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。

    **2.集合框架*

            JAVA SE提供了满足各种需求的API,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用。

            集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection双列集合(键-值对)java.util.Map

            ·Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.Listjava.util.Set,其中,List的特点是元素有序、元素可重复。Set的特点是元素无序,而且不可重复,List接口的主要实现类java.util.ArrayListjava.util.LinkedListSet接口的主要实现类有 java.util.HashSetjava.util.TreeSet

            从上面的描述可以看出IDK中提供了丰富的集合类库,为了便干初学者进行系统地学习,接下来通过一张图来描述整个集合类的继承体系。

    3.Collection(所有单列集合的父接口)常用功能(实现了List和Set的一些方法)

            注:Collections和Collections是不一样的

            Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合

            方法如下:

            ·public boolean add(E e): 把给定的对象添加到当前集合中

            ·public void clear): 清空集合中所有的元素。

            ·public boolean remove(E e): 把给定的对象在前集合中删除

            *public boolean contains(E e): 判断当前集合中是否包含给定的对象

            ·public boolean isEmpty0:判断当前集合是否为空

             public int size(): 返回集合中元素的个数

            ·public Object toArray(): 把集合中的元素,存储到数组中。

     使用Collection中的常用方法的例子

            测试类:

                    创建Collection为父类指向ArrayList子类的Student类型的对象c

                    向对象c中插入两个对象

                    调用Collection中的方法判断列表中的元素个数

                    调用Collection中的方法判断数列是否为空

                            如果为空,输出:列表为空

                            如果不为空,输出列表中的元素信息

            注意

            父类不提供get()方法,当创建父亲类型的子类对象列表时,无法通过get()获得列表中的值,即无法通过for循环,通过下标+get()的形式获取列表中的值。

             此时可以通过foreach循环来实现:

            foreach循环:

            循环数组里面的每一个元素,不需要索引,提高了代码的可读性和安全性不用怕数组越界,每次循环都将获取的列表对象赋给循环变量,循环变量即可调用获取对象的方法

            foreach循环的格式:

            for(循环数组或集合的类型 变量 : 循环的数组或集合)
                    {输出的内容}

             toString方法:(每个类都有,继承于Object类可以重写)

                    返回类调用类内的属性值(返回格式为:类名{"属性名"+属性值+"}")

    1. package bbb;
    2. import java.sql.SQLOutput;
    3. import java.util.ArrayList;
    4. import java.util.Collection;
    5. import java.util.List;
    6. public class Test {
    7. public static void main(String[] args) {
    8. Collection c = new ArrayList<>();
    9. //创建一个Student类型的ArrayList对象,父类是Collection
    10. Student s = new Student("Lili",18);
    11. c.add(s);
    12. //往ArrayList对象列表c中添加对象s
    13. c.add(new Student("Lucy",20));
    14. //往ArrayList对象列表c中添加匿名对象
    15. System.out.println("集合的元素个数是:"+c.size());
    16. if(c.isEmpty())//调用c中的方法
    17. System.out.println("这个集合是空的");
    18. else{
    19. /*
    20. for(循环数组或集合的类型 变量 : 循环的数组或集合)
    21. {输出的内容}
    22. */
    23. for(Student student:c){
    24. student.printMessage();
    25. }
    26. }
    27. c.clear();
    28. if(c.isEmpty())
    29. System.out.println("这个集合是空的");
    30. else{
    31. for(Student student:c){
    32. student.printMessage();
    33. }
    34. }
    35. }
    36. }

            Student类 

    1. package bbb;
    2. public class Student {
    3. private String name;
    4. private int age;
    5. public void printMessage(){
    6. System.out.println("姓名:" + this.name+"年龄:"+ this.age);
    7. }
    8. @Override
    9. public String toString() {
    10. return "Student{" +
    11. "name='" + name + '\'' +
    12. ", age=" + age +
    13. '}';
    14. }
    15. public Student() {
    16. }
    17. public Student(String name, int age) {
    18. this.name = name;
    19. this.age = age;
    20. }
    21. public String getName() {
    22. return name;
    23. }
    24. public void setName(String name) {
    25. this.name = name;
    26. }
    27. public int getAge() {
    28. return age;
    29. }
    30. public void setAge(int age) {
    31. this.age = age;
    32. }
    33. }

  • 相关阅读:
    深度学习论文: An Improved One millisecond Mobile Backbone及其PyTorch实现
    【开源】基于JAVA的智能停车场管理系统
    【杂项】如何将指定字体装入电脑然后能在Office软件里使用该字体?
    深入剖析CVE-2021-40444-Cabless利用链
    elementUI 轮播图 ----Carousel 走马灯笔记
    通过vue-codemirror和CodeMirror将代码编辑器添加到web项目中
    Array.reduce() 详解
    【零基础入门MyBatis系列】第十二篇——高级映射、延迟加载
    npm install 报错ERESOLVE unable to resolve dependency tree
    leetcode:968. 监控二叉树【树状dp,维护每个节点子树的三个状态,非常难想权当学习,类比打家劫舍3】
  • 原文地址:https://blog.csdn.net/m0_56501550/article/details/127722363