Java小白一文讲清Java中集合相关的知识点(一)

news2024/9/23 3:30:23

集合

诞生缘由

数组

  • 长度开始时必须指定,而且一旦指定,不能更改
  • 保存的必须为同一类型元素
  • 使用数组进行增/删元素所需要编写的代码–比较麻烦
Person[] pers = new Person[1];
pers[0] = new Person();
//此时增加新的Person对象呢?
Person[] pers2 = new Person[pers.length+1]//新创建数组
for(){}//拷贝pers数组的元素到pers2
pers2[pers2.length-1]=new Person();//添加新对象

//可见很麻烦,所以,集合诞生了

集合介绍

  • 可以动态保存任意多个对象,使用比较方便
  • 提供了一系列方便的操作对象的方法—add、remove、set、get等
  • 使用集合添加,删除新元素所需要编写的代码—简洁

集合的框架体系

单列集合

两个重要的子接口List Set ,他们的实现子类都是单列集合

在这里插入图片描述

双列集合

Map的实现子类都是双列集合,以K-V 形式存放
在这里插入图片描述

Collection接口和常用方法

  • collection实现子类可以存放多个元素,每个元素可以是Object
  • 有些collection的实现类,可以存放重复的元素,有些不可以
  • Collection接口没有直接的实现子类,是通过它的子接口Set和List来实现的

常用方法

接口不能实例化,所以以下的举例以实现了Collection接口的ArrayList类来举例

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

public class Journey {
    @SuppressWarnings({"all"})//抑制所有的警告
    public static void main(String[] args) {
        //以ArrayList实现类来演示
        List list = new ArrayList();
        //add 添加单个元素
        list.add("jack");
        list.add(10);//此中有一个自动装箱的过程=(new Integer(10));
        list.add(true);
        System.out.println("List = "+list);//List = [jack, 10, true]

        //remove 删除指定元素
        list.remove(0);//指定删除某个索引对应的元素
        System.out.println("List = "+list);//List = [10, true]
        list.remove(true);//指定删除某个内容
        System.out.println("List = "+list);//List = [10]

        //contains 查找某个元素是否存在
        System.out.println(list.contains("jack"));//false

        //size  获取元素的个数
        System.out.println(list.size());//1

        //isEmpty 判断是否为空
        System.out.println(list.isEmpty());//false

        //clear  清空
        list.clear();
        System.out.println(list.size());//0

        //addAll  添加多个元素,就是可以把装有多个元素的集合再套进另一个集合中,实现原先的集合添加多个元素
        list.add("essence");
        List list2 = new ArrayList();
        list2.add("kerwin");
        list2.add(false);
        list2.add(1110);

        list.addAll(list2);
        System.out.println("此时的list1 = "+list);//此时的list1 = [essence, kerwin, false, 1110]

        //containsAll 查找多个元素是否都存在
        System.out.println(list.containsAll(list2));//true  list中包含有多个元素的集合list2

        //removeAll   删除多个元素
        list.removeAll(list2);
        System.out.println("list = "+list);//list = [essence]

    }
}

Collection接口遍历元素方式

使用Iterator迭代器实现

介绍

  • Iterator对象称为迭代器,主要用于遍历Collection集合中的元素
  • 所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器
  • Iterator的结构
  • Iterator仅用于遍历集合,Iterator本身并不存放对象

在这里插入图片描述
在这里插入图片描述


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

public class Journey {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Collection col = new ArrayList();//向上转型,父类型引用指向子类型对象
        col.add(new Book("三国演义","罗贯中",10.1));
        col.add(new Book("水浒传","施耐庵",5.1));
        col.add(new Book("西游记","吴承恩",63.5));

        System.out.println("col"+col);
        /**
         * 不间断,输出很长的一行
         *  col[Book{name='三国演义', author='罗贯中', price=10.1},
         * Book{name='水浒传', author='施耐庵', price=5.1},
         * Book{name='西游记', author='吴承恩', price=63.5}]
         */
        //现在我们希望能够遍历集合
        //1.先得到col 对应的迭代器
        Iterator iterator = col.iterator();
        //2.使用while循环遍历
        while(iterator.hasNext()){//判断是否还有数据,这里脑海中要浮现出iterator的结构哈
            //返回下一个元素,类型是Object
            Object obj = iterator.next();
            System.out.println("obj="+obj);//这里默认调的是obj对应的toString方法
            //这里会有动态绑定机制,像这里就是绑定到了Book类的toString方法;
            //此中的编译类型确实是Object,但是运行类型是取绝于你真正存放的类型,这里是存放的Book类型嘛

        }
        //经过迭代器后,输出三行
//        obj=Book{name='三国演义', author='罗贯中', price=10.1}
//        obj=Book{name='水浒传', author='施耐庵', price=5.1}
//        obj=Book{name='西游记', author='吴承恩', price=63.5}

        //顺便一提,上面的while循环的框架可以通过快捷键itit就可以快速生成
        //生成如下:

/*        while (iterator.hasNext()) {
            Object obj =  iterator.next();

        }*/

        //3.当退出while循环之后,这时iterator指向最后的元素
        //此时,再取元素
//         iterator.next();
        // 会报NoSuchElementException 异常
        //4.如果希望再次遍历,那么需要重置我们的迭代器
         iterator = col.iterator();
        System.out.println("==========第二次遍历=====");
        while (iterator.hasNext()) {
            Object obj =  iterator.next();
            System.out.println("obj="+ obj);
            
        }
        /**
         * ==========第二次遍历=====
         * obj=Book{name='三国演义', author='罗贯中', price=10.1}
         * obj=Book{name='水浒传', author='施耐庵', price=5.1}
         * obj=Book{name='西游记', author='吴承恩', price=63.5}
         */
    }
}
@SuppressWarnings({"all"})
class Book{
    private String name;
    private String author;
    private double price;

    public Book(String name, String author, double price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}
使用增强for循环实现

增强for循环,可以代替iterator迭代器,特点:增强for就是简化版的iterator,本质一样,只能用以遍历集合或数组

基本语法

  • for( 元素类型 元素名: 集合名或数组名){

    ​ 访问元素

    }

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

public class Journey {
    @SuppressWarnings({"all"})
    public static void main(String[] args) {
        Collection col = new ArrayList();//向上转型,父类型引用指向子类型对象

        col.add(new Book("三国演义","罗贯中",10.1));
        col.add(new Book("水浒传","施耐庵",5.1));
        col.add(new Book("西游记","吴承恩",63.5));

        //使用增强for循环遍历
        //增强for 其底层还是迭代器
        for(Object book : col){
            System.out.println(book);
        }
        //输出如下
        /**
         * Book{name='三国演义', author='罗贯中', price=10.1}
         * Book{name='水浒传', author='施耐庵', price=5.1}
         * Book{name='西游记', author='吴承恩', price=63.5}
         */

        //这里再讲个快捷键
        //输入一个 I,即可快捷生成增强for框架
   /*
        快速生成以下框架
        for (Object o :) {

        }*/

    }
}
@SuppressWarnings({"all"})
class Book{
    private String name;
    private String author;
    private double price;

    public Book(String name, String author, double price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                '}';
    }
}

练习

在这里插入图片描述

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

public class Journey {
    public static void main(String[] args) {
        List<Dog> list = new ArrayList<>();
        Dog xiaohuang = new Dog("小黄", 15);
        Dog hei = new Dog("小嘿", 8);
        list.add(xiaohuang);
        list.add(hei);

        //迭代器遍历
        Iterator<Dog> iterator = list.iterator();
        while(iterator.hasNext()){//判断是否为空
            Object obj = iterator.next();
            System.out.println(obj);
        }

        System.out.println("增强for遍历");
        for(Object dogs : list){
            System.out.println(dogs);
        }
    }
}
@SuppressWarnings({"all"})
class Dog{
    private String name;
    private int age;

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

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

//输出
Dog{name='小黄', age=15}
Dog{name='小嘿', age=8}
增强for遍历
Dog{name='小黄', age=15}
Dog{name='小嘿', age=8}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2095973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】卫星通信NTN 3GPP标准化进展分析(一)-基本信息

一、引言&#xff1a; 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划&#xff0c;是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析&#xff08;一&#xf…

前端开发第二节课

HTML常用的标签 文本格式化标签 在网页中&#xff0c;有时需要为文字设置粗体、斜体或下划线等效果&#xff0c;这时就需要用到HTML中的文本格式化标签使文字以特殊的方式显示。 标签语义&#xff1a;突出重要性&#xff0c;比普通文字更重要。 加粗 <strong></st…

Spring框架;Spring中IOC简介及搭建;Spring中AOP简介;

一&#xff0c;Spring介绍 Spring 的全称&#xff1a; Spring Framework Spring是一个优秀的开源的轻量级的企业应用开发框架&#xff0c;是为了解决企业应用程序开发复杂性而创建的。它大大简化了java企业级开发的复杂性&#xff0c;提供了强大&#xff0c;稳定的功能&#xf…

XR-Frame 实现 始终朝向屏幕(相机)的面片与模型

wxml&#xff0c;xr-frame中plane平面默认是趴在场景中的&#xff0c;需要先绕x轴渲染90度&#xff0c; // 面片 <xr-node id"l" position"-3.0 0 0.0"><xr-mesh rotation"90 0 0" geometry"plane" uniforms"u_base…

浅析synchronized锁升级的原理与实现 2

本文内容是继我的上篇博客 浅析synchronized锁升级的原理与实现 1-CSDN博客 目录 各状态锁的升级场景 无锁 --> 轻量级锁 偏向锁 --> 轻量级锁 偏向锁 --> 重量级锁 轻量级锁 --> 重量级锁 总结 各状态锁的升级场景 下面我们结合代码看下各状态锁的升级场景。…

VL53L1CB TOF开发(2)----多区域扫描模式

VL53L1CB TOF开发.2--多区域扫描模式 概述视频教学样品申请源码下载硬件准备主要特点生成STM32CUBEMX串口配置IIC配置XSHUTGPIO1X-CUBE-TOF1堆栈设置函数说明初始化设置预设模式 (Preset mode)VL53L1_SetPresetModeVL53L1_SetDistanceMode时间预算单个ROI&#xff08;Single R…

从 Oracle 到 TiDB 丨数据库资源评估指南

原文来源&#xff1a; https://tidb.net/blog/5058e24f 本文作者&#xff1a;柳冬冬 导读 在当今技术飞速发展的时代&#xff0c;传统单机数据库正面临着前所未有的挑战。随着人工智能、云计算和大数据的崛起&#xff0c;企业对数据库的性能、可靠性和扩展性的需求日益增…

wordcloud兼figma的词云图片python生成

文章目录 一.Figma1.简介2.特点 二.代码构成1.详细代码2.word.py代码详解3.成果图 一.Figma 1.简介 Figma是一款全平台可使用的使用软件&#xff0c;和Sketch功能差不多&#xff1b;但是他可以在Mac&#xff0c;Windows PC&#xff0c;Linux计算机甚至Chromebook&#xff0c;…

中国各地级市-产业增加值、产业升级、产业结构高级化(2000-2021年)

产业增加值、产业升级和产业结构高级化是衡量地区经济发展水平的重要指标&#xff1a; 产业增加值&#xff1a;指在一定时期内&#xff0c;单位产值的增长部分&#xff0c;体现了产值、产量和增加值的综合增长能力。 产业升级&#xff1a;指通过技术进步和效率提升&#xff0c…

5.sklearn-朴素贝叶斯算法、决策树、随机森林

文章目录 环境配置&#xff08;必看&#xff09;头文件引用1.朴素贝叶斯算法代码运行结果优缺点 2.决策树代码运行结果决策树可视化图片优缺点 3.随机森林代码RandomForestClassifier()运行结果总结 环境配置&#xff08;必看&#xff09; Anaconda-创建虚拟环境的手把手教程相…

产品售后|基于SprinBoot+vue的产品售后管理​​​​​​​系统(源码+数据库+文档)

产品售后管理系统 目录 基于SprinBootvue的产品售后管理系统 一、前言 二、系统设计 三、系统功能设计 管理员模块实现 客户模块实现 受理人员模块实现 工程师模块实现 厂商模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、…

STM32外部中断(总结了易出现的BUG)

本文主要讲述了&#xff0c;本人在使用STM32F103C8T6做项目时&#xff0c;使用到按键触发外部中断时&#xff0c;发现无法触发外部中断。通过查看寄存器找出问题的过程&#xff0c;并总结了出现该问题的原因。 出现的问题 在使用STM32F103C8T6做一个矩阵键盘任务时&#xff0…

【学习笔记】卫星通信NTN 3GPP标准化进展分析(五)- 3GPP Release19 研究计划

一、引言&#xff1a; 本文来自3GPP Joern Krause, 3GPP MCC (May 14,2024) Non-Terrestrial Networks (NTN) (3gpp.org) 本文总结了NTN标准化进程以及后续的研究计划&#xff0c;是学习NTN协议的入门。 【学习笔记】卫星通信NTN 3GPP标准化进展分析&#xff08;一&#xff…

R语言报错 | object ‘integral‘ not found whilst loading name

1、报错背景 Registered S3 method overwritten by htmlwidgets:method from print.htmlwidget tools:rstudio Error: package or namespace load failed for ‘Seurat’:object integral not found whilst loading namespace spatstat.core 当我想library&…

RabbitMQ~架构、能力、AMQP、工作模式、高可用、死信队列了、事务机制了解

RabbitMQ RabbitMQ是使用Erlang编写的一个开源的消息中间件。它实现了AMQP(高级消息队列协议)&#xff0c;并支持其他消息传递协议&#xff1a;例如STOMP(简单文本定向消息协议)和MQTT(物联网协议)。 支持多种客户端如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、…

4-7 使用bios 中断 读取磁盘

1 首先是逻辑。 首先来看一下 他的编译代码的逻辑。 可以看到我 生成的 实际上是 Boot.bin , 这个文件可不止一个扇区&#xff0c; 然后将这个文件写入到了&#xff0c; disk1.img 这里加载了 disk1.img , disk2.img 我不太理解。 但是可以跑通&#xff0c; 暂时先不管了。…

How can I change from OpenAI to ChatOpenAI in langchain and Flask?

题意&#xff1a;“在 LangChain 和 Flask 中&#xff0c;如何将 OpenAI 更改为 ChatOpenAI&#xff1f;” 问题背景&#xff1a; This is an implementation based on langchain and flask and refers to an implementation to be able to stream responses from the OpenAI …

力扣763-划分字母区间(Java详细题解)

题目链接&#xff1a;763. 划分字母区间 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法&#xff1a;局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优&#xf…

云服务器系统盘存储空间不够用怎么办?解决方法:扩容或挂载数据盘

云服务器系统盘满了不够用怎么办&#xff1f;服务器百科&#xff1a;可以系统盘扩容&#xff0c;也可以通过挂载数据盘来增大存储空间。 1、系统盘扩容教程&#xff1a;使用云服务器系统盘空间不足时&#xff0c;可以在ECS控制台上扩容云盘的容量以增加存储空间。阿里云支持云…

MCU3.电平等一些名词

1.电平的简单定义 计算机由各种硬件组成&#xff0c;只认识0和1&#xff0c;可以通过改变电压来向计算机输入数据&#xff08;0和1&#xff09; 例如&#xff1a;最大电压为3.3V 电压范围是0~3.3V&#xff0c;可以定义0~1V较低的电压表示0&#xff0c;定义2~3.3V较高的电压表…