首页 > 其他分享 >集合框架(一)

集合框架(一)

时间:2023-08-13 19:35:01浏览次数:33  
标签:遍历 String 框架 ArrayList 集合 new public

1、集合的相关概念

1.1、为什么需要集合?

集合也是一个容器,但是可以自动扩容,只需要往里面添加元素就行,这样可以解决数组的定长问题。但是不能储存基本数据类型。添加基本数据类型需要使用包装类。

1.2、集合的分类:单列集合和双列集合。

2、ArrayList

2.1、基本使用如下所示:

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<String> person = new ArrayList<>();       //后面的尖括号不能少
        /**
         * ArrayList的基本方法
         * 增:add,返回bool
         * 删:remove(E e),返回bool     remove(int index):删除指定索引并返回这个元素
         * 查:e get(int index):获取指定索引的元素,size():返回集合的长度
         * 改:E set(int index,E e):修改指定索引的元素,并且返回原来的元素
         *
         * */
        
        //添加数据
        person.add(new String("qz1027"));
        person.add(new String("酋长"));
        System.out.println(person);

        //循环遍历集合
        for (int i = 0; i < person.size(); i++) {
            System.out.println(person.get(i));
        }

        //添加基本数据类型
        ArrayList<Integer> age = new ArrayList<>();
        //可以直接往里面添加基本数据
        for (int i = 1; i <= 10; i++) {
            age.add(i);
        }
        for (int i = 0; i < person.size(); i++) {
            System.out.println(age.get(i));
        }
    }
}
3、Collection集合(单列集合的顶层父类接口)

3.1、体系框架如下所示: image.png

3.2、List(ArrayList和LinkedList)系列集合:添加的元素是有序(存和取的顺序相同),可重复,有索引的。

3.3、Set(HashSet和TreeSet和LinkedHashSet)系列集合:添加的元素是无序 ,不重复,无索引的(意味着删除时不能通过索引删除)。

Collection常见方法如下所示:

image.png ==上述方法中,如果要使用contains方法判断当前集合(此集合里面的内容是非String的自定义数据类型)中是否包含给定的对象,一定要在Javabean中重写equals方法!!!==如下所示:

import java.util.Objects;

public class Student {
    private String name;
    private int age;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }


    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }

}
//测试类
import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<Student> stu = new ArrayList<>();
        stu.add(new Student("张三",18));
        stu.add(new Student("李四",21));

        boolean flag = stu.contains(new Student("张三",18));
        System.out.println(flag);       //true
        flag = stu.contains(new Student("张三",21));
        System.out.println(flag);       //false
    }
}

3.4、Collection的遍历方式

3.4.1、迭代器遍历

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

实例代码如下所示:

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

public class Test {
    public static void main(String[] args) {
        ArrayList<String> str = new ArrayList<>();
        str.add(new String("张三"));
        str.add(new String("李四"));

        //获取对象
        Iterator<String> it = str.iterator();
        //循环遍历
        while(it.hasNext()){
            System.out.println(it.next());
        }

    }
}

注意点:

①、当循环结束的时候,迭代器指针不会归零,如果想要再次遍历,需要再次定义一个迭代器

②、使用迭代器遍历的时候,不能使用集合的方法进行添加和删除。会有并发修改的异常!!如果要进行删除,要用迭代器提供的remove方法,格式为:迭代器.remove();

3.4.2、增强for遍历

简化迭代器遍历单列集合的繁琐,并且只有单列集合和数组才能用增强for进行遍历。

格式为(在idea中有快捷生成方式,直接集合的名字+ for回车):

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

​ System.out.println(变量名);

}

增强for的细节:如果修改增强for中的变量,不会改变集合中原有的数据。

3.4.3、基于Lambda表达式进行遍历(调用forEach方法,底层也是逐一遍历集合)

测试代码如下所示:

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<String> str = new ArrayList<>();
        str.add(new String("张三"));
        str.add(new String("李四"));

        //使用Lambda表达式进行遍历
        str.forEach((String s) -> {
            System.out.println(s);
        });

    }
}

三种遍历方式的选择:

迭代器:在遍历的过程中需要对数据进行删除。

增强for和Lambda表达式遍历:只对数据进行遍历,而不进行操作。

3.5、List集合的特有方法 image.png

这里删除有两种方式,当集合里面存放的是基本数据类型时,如果我们传递过去一个数字进行删除,那么首先会调用通过索引进行删除(因为在Java中,会优先调用实参数据类型和形参数据类型相同的方法),如果要想直接删除传递过去的那个数,我们需要进行手动装箱,如下所示:

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        ArrayList<Integer> integers = new ArrayList<>();
        //添加数据
        for (int i = 1; i <= 5; i++) {
            integers.add(i);
        }

        //下面的代码将删除1号索引处的数据,如果想要删除数据1,我们要进行手动装箱
        integers.remove(1);
        System.out.println(integers);   //输出:[1, 3, 4, 5]

        //手动装箱
        Integer i = Integer.valueOf(1);
        //然后再传递至remove
        integers.remove(i);
        System.out.println(integers);  //输出:[3, 4, 5]

    }

}

3.5.1、List的遍历方式

①、迭代器遍历

②、增强for遍历

③、Lambda表达式遍历

④、基于索引的遍历

⑤、列表迭代器遍历(这种方式里面提供了操控数据的方法,比如增加修改等)

image.png

import java.util.ArrayList;
import java.util.ListIterator;

public class Test {
    public static void main(String[] args) {
        test01();
    }

    public static void test01(){
        ArrayList<Integer> integers = new ArrayList<>();
        //添加数据
        for (int i = 1; i <= 5; i++) {
            integers.add(i);
        }

        ListIterator<Integer> it = integers.listIterator();

        while(it.hasNext()){
            int value = it.next();
            System.out.println(value);
            //可以对数据进行修改
            if(value == 2){
                it.set(100);
            }
        }

        System.out.println("---------------------");

        ListIterator<Integer> it1 = integers.listIterator();

        while(it1.hasNext()){
            int value = it1.next();
            System.out.println(value);
        }

    }

}

标签:遍历,String,框架,ArrayList,集合,new,public
From: https://blog.51cto.com/u_15433911/7068885

相关文章

  • 2个List集合取差集
    定义了一个Student实体类/***@author王立朝*@date2023/3/21*@description:*/publicclassStudent{privateStringid;privateStringname;privateIntegerage;privateStringispUserId;@OverridepublicStringtoString(){......
  • SSM框架整合
    SSM框架整合原始方式整合创建数据库和表创建Maven工程导入maven坐标<dependencies><!--上下文--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><versio......
  • C++STL库 二分查找,以及对set集合进行二分查找,来源于”leetcode7022. 限制条件下元素之
    C++的头文件<algorithm>中有用于二分查找的函数,lower_bound()、upper_bound()以及binary_search():lower_bound():返回大于等于目标值的第一个位置upper_bound():返回大于目标值的第一个位置,binary_search():若目标值存在则返回true,否则返回false参数列表:(起始位置,结束位置,目标值) ......
  • ALSA声卡裸板之原理和框架
    1.声音是如何存储和播放的所谓存储就是如何将波形记录下来,这就涉及采样。所谓采样,就是每隔一段时间将波形的幅值记录下来2.如何写声卡的裸板程序在machine驱动部分,我们主要实现对声卡的控制操作。以JZ2440为例进行讲解:原理图如下:CONTROLINTERFACE3wireserialcontr......
  • mybatis框架
    mybatis框架1、mybatis框架介绍MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,并且改名为MyBatis。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS......
  • 使用 Fiori Elements 框架开发应用的优势
    FioriElements框架是SAP提供的一种开发应用程序的高级抽象层。它建立在SAPUI5框架之上,旨在简化企业应用的开发过程,提高开发效率,并保持应用的一致性和用户体验。使用FioriElements框架,开发人员可以快速创建符合SAPFiori设计准则的应用,无需大量的手动编写代码。本文将探......
  • NodeJS系列(9)- Next.js 框架 (二)
    在“NodeJS系列(8)-Next.js框架(一)”里,我们简单介绍了Next.js的安装配置,创建了nextjs-demo项目,讲解和演示了Next.js项目的运行、路由(Routing)、页面布局(Layout)等内容。本文继续在nextjs-demo项目基础上,讲解和演示国际化(i18n)、中间件(Middleware)等内容。NextJS:h......
  • dectron2框架export导出并使用 onnx 记录
    pythontools/deploy/export_model.py\--sample-image/Users/gatilin/PycharmProjects/model-graphviz-plot/model_graph/detectron/000000439715.jpg\--config-fileconfigs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml\--export-methodt......
  • 【Quarkus技术系列】打造基于Quarkus的云原生微服务框架实践(1)
    推荐超值课程:点击获取前提介绍本系列文章主要讲解如何基于Quarkus技术搭建和开发"专为Kubernetes而优化的Java微服务框架"的入门和实践,你将会学习到如何搭建Quarkus微服务脚环境及脚手架,开发Quarkus的端点服务,系统和应用层级的配置介绍与Quarkus的编程模型分析,创建Quarkus的应用......
  • Go语言gorm框架MySQL实践
    gorm是一个使用Go语言编写的ORM框架。文档齐全,对开发者友好,支持主流数据库。我最近在补齐Go语言各类基础的框架和操作库的知识,终于进展到了数据库阶段,搜资料的时候基本都是推荐这个框架,可见其之流行程度。在不断尝试练习之后,总结了一些经验和使用方式,供初学者参考。在之前使用Jav......