Arraylist集合

news2024/11/25 21:45:34

保存数据会经常使用到数组,但数组存在以下几个缺陷:

  1. 长度固定;
  2. 保存的必须为同一类型的元素,(基本数据类型,或引用数据类型);
  3. 使用数组进行增加元素的步骤比较麻烦;

这个时候就需要用一个比数组要“高级的容器”来解决,这就是集合:

  1.  可以动态保存任意多个不同类型对象,使用方便;
  2. 提供了一系列方便的操作对象的方法:add、remove、set、get等;
  3.  使用集合添加、删除新元素要简单的多;
  4. 集合不能存放基本数据类型,只能存放对象的引用,对于基本数据类型的存放,都是存的包装类,即 Integer、Byte等;

<E>表示泛型

 

import java.util.ArrayList;

public class Demo01 {
    public static void main(String[] args) {
        //泛型:限定集合中存储数据的基本类型
        //不能写int  要用Integer
        // ArrayList<int> list = new ArrayList<>();  //报错
        ArrayList<String> list = new ArrayList<>();
        //此时我们创建的是ArrayList的对象,而ArrayList是java已经写好的一个类
        // 这个类在底层做了一些处理打印对象不是地址值,而是集合中存储数据内容
        // 在输出的时候会拿[]把所有的数据进行包裹
        System.out.println(list); //[]
    }
}

ArrayList成员方法

方法名说明
boolean add(E e)添加元素,返回值表示是否添加成功
boolean remove(E e)删除指定元素,返回值表示是否删除成功
E remove(int index)删除指定索引的元素,返回被删除元素
E set(int index,E e)修改指定索引下的元素,返回原来的元素
E get(int index)获取指定索引的元素
int size()集合的长度,也就是集合中元素的个数

import java.util.ArrayList;

public class ArraylistDemo02 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        //添加元素
        System.out.println(list.add("a"));//true
        System.out.println(list);//[a]

        //多添加几个
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
        System.out.println(list);//[a, b, c, d, e]

        //获取长度
        System.out.println(list.size());//5
        //遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");//a b c d e 
        }
        System.out.println();//换行

        //删除元素
        System.out.println(list.remove(0));//删除索引为0的元素返回被删除元素 //a
        System.out.println(list.remove("e"));//删除知道元素e  //true
        System.out.println(list);//[b, c, d]

        //修改元素
        System.out.println(list.set(1, "111"));//修改指定索引1的元素,返回原来的元素 //c
        System.out.println(list);//[b, 111, d]

        //查询
        System.out.println(list.get(0));//获取指定索引的元素 //b
    }
}

基本数据类型对应的包装类:

intInteger
charCharacter
byteByte
shortShort
longLong
floatFloat
doubleDouble
booleanBoolean

例1:

import java.util.ArrayList;

public class Demo03 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        //添加元素
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        //遍历
        System.out.print("[");
        for (int i = 0; i < list.size(); i++) {
            if (i == list.size() - 1) {
                System.out.print(list.get(i));
            } else {
                System.out.print(list.get(i) + ",");
            }
        }
        System.out.println("]");
        //[a,b,c,d,e]


        ArrayList<Integer> list2 = new ArrayList<>();
        list2.add(1);
        list2.add(2);
        list2.add(3);
        list2.add(4);
        list2.add(5);

        //遍历
        System.out.print("[");
        for (int i = 0; i < list2.size(); i++) {
            if (i == list2.size() - 1) {
                System.out.print(list2.get(i));
            } else {
                System.out.print(list2.get(i) + ",");
            }
        }
        System.out.println("]");
        //[1,2,3,4,5]

        ArrayList<Character> list3 = new ArrayList<>();
        list3.add('s');
        list3.add('d');
        list3.add('f');
        System.out.println(list3);//[s, d, f]
    }
}

例2:

import java.util.ArrayList;

public class ArraylistDemo04 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        //创建学生对象
        Student s1 = new Student("nn", 5);
        Student s2 = new Student("hh", 6);

        //添加元素
        list.add(s1);
        list.add(s2);
        //换种方式添加
        list.add(new Student("pd", 7));
        list.add(new Student("bb", 8));

        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            //方式一
            //System.out.print(list.get(i).getName() + "," + list.get(i).getAge()+" ");

            // 方式二
            Student student = list.get(i);
            System.out.print(student.getName() + "," + student.getAge() + " ");
            //nn,5 hh,6 pd,7 bb,8
        }

    }
}

class Student {
    private String name;
    private int age;

    public Student() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

例3

import java.util.ArrayList;
import java.util.Scanner;

public class ArraylistDemo05 {
    public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();


        //键盘录入
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            Student student = new Student();
            System.out.println("请输入学生姓名");
            String name = sc.next();
            System.out.println("亲输入学生年龄");
            int age = sc.nextInt();
            //name,age赋值给学生对象
            student.setName(name);
            student.setAge(age);

            //学生对象添加到集合中
            list.add(student);
        }
        //遍历集合
        for (int i = 0; i < list.size(); i++) {
            //方式一
            System.out.print(list.get(i).getName() + "," + list.get(i).getAge() + " ");
        }
    }
}
class Student {
    private String name;
    private int age;

    public Student() {
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

例4

import java.util.ArrayList;

/*
 *定义Javabean类:PhonePhone属性:品牌,价格。
 * main方法中定义一个集合,存入三个手机对象。分别为:小米,2000。苹果,8000。华为9999.vivo 2999
 * 定义一个方法,将价格低于3000的手机信息返回
 */
public class ArraylistDemo06 {
    public static void main(String[] args) {
        ArrayList<Phone> list = new ArrayList<>();

        //创建手机对象
        Phone p1 = new Phone("小米", 2000);
        Phone p2 = new Phone("苹果", 8000);
        Phone p3 = new Phone("华为", 9999);
        Phone p4 = new Phone("vivo", 2999);
        //添加数据
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);

        ArrayList<Phone> info = getPhoneInfo(list);

        //遍历
        for (int i = 0; i < info.size(); i++) {
            System.out.print(info.get(i).getBrand() + "," + info.get(i).getPrice() + " ");
        }

    }

    public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list) {
        //返回多个数据,可以把这些数据先放到一个容器之中,再把容器返回
        ArrayList<Phone> resultList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getPrice() < 3000) {
                resultList.add(list.get(i));
            }
        }
        return resultList;
    }
}

class Phone {
    private String brand;
    private int price;

    public Phone() {
    }

    public Phone(String brand, int price) {
        this.brand = brand;
        this.price = price;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

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

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

相关文章

24届近3年南京信息工程大学自动化考研院校分析

今天给大家带来的是南京信息工程大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、南京信息工程大学 学校简介 南京信息工程大学位于南京江北新区&#xff0c;是一所以大气科学为特色的全国重点大学&#xff0c;由江苏省人民政府、中华人民共和国教育部、中国气…

【AI理论学习】手把手利用PyTorch实现扩散模型DDPM

手把手利用PyTorch实现扩散模型DDPM DDPM代码实现神经网络定义辅助函数位置嵌入ResNet block注意力模块分组归一化Conditional U-Net 定义前向扩散过程定义PyTorch数据集DataLoader采样训练模型采样后续阅读 参考链接 上一篇博文已经手把手推导了扩散模型DDPM&#xff0c;本文利…

1. 消息队列

消息队列 1.1. MQ 的相关概念 1.1.1. 什么是 MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在…

性能测试—Jmeter工具

文章目录 性能测试1. 术语介绍2. 方法3. 应用场景4. 工具&#xff08;Jmeter&#xff09;4.1 介绍4.2 元件和组件4.2.2 元件4.2.1 组件 4.3 作用域4.4 参数化4.5 执行脚本 性能测试 1. 术语介绍 响应时间(Response time)&#xff1a;对请求作出响应所需要的时间。 在互联网上对…

Tik Tok娱乐+电商MCN怎么做?

在美国外的热门市场中&#xff0c;TikTok 主要做的区域市场包括中东、拉美、欧洲和东亚&#xff0c;而这里面适合做电商的其实并不多。 欧洲、东亚都属于成熟市场&#xff0c;且 TikTok 本身在欧洲面临 DSA 法案更严格的审查&#xff0c;与在英国相同&#xff0c;欧洲各市场消…

【二分+贪心】CF1622 C

Problem - 1622C - Codeforces 题意&#xff1a; 思路&#xff1a; 首先&#xff0c;观察样例可知&#xff0c;肯定是把原本的最小值减到某个值&#xff0c;然后再复制几次 复制的时候肯定是从大到小复制 那把最小值减到哪个值是不确定的&#xff0c;考虑枚举这个值&#x…

并发编程--------JUC集合

并发集合 一、ConcurrentHashMap 1.1 存储结构 ConcurrentHashMap是线程安全的HashMap ConcurrentHashMap在JDK1.8中是以CASsynchronized实现的线程安全 CAS&#xff1a;在没有hash冲突时&#xff08;Node要放在数组上时&#xff09; synchronized&#xff1a;在出现hash…

STM32CubeMX之freeRTOS事件组

当有多个判断&#xff0c;才会执行的时候&#xff0c;就会有事件组 事件组就是24个标志位的组合&#xff0c;或操作或者与操作就可以操作其 例如发射导弹 需要很多人都同意才能发送 V1版本无法自动添加事件组 这里手动创建事件组 这里是基本的使用 置1操作 这里进行事件组的…

初创体验版彩虹知识付费商城源码 V3.4支持二级分类,多级分销,秒杀,砍价,团购,首页继续浏览

最新彩虹知识付费商城初创体验版&#xff0c;支持二级分类&#xff0c;多级分销&#xff0c;秒杀&#xff0c;砍价&#xff0c;团购&#xff0c;首页继续浏览&#xff0c;分站个人虚拟余额自定义&#xff0c;最新批量对接&#xff0c;批量下载图片&#xff0c;批量替换标题&…

工厂物流管理:提升生产效率的关键驱动力

工厂物流管理在现代制造业中扮演着至关重要的角色。它涉及到物料的采购、生产过程中的物料运输和仓储管理&#xff0c;以及最终产品的分发。 1. 定义和重要性: 工厂物流管理是指通过合理规划、组织和控制物流活动&#xff0c;确保物料和产品在生产过程中的高效流动。它的目标是…

【Java多线程学习7】Java线程池技术

线程池技术 一、什么是线程池 线程池顾名思义是管理一组线程的池子。当有任务要处理时&#xff0c;直接从线程池中获取线程来处理&#xff0c;处理完之后线程不会立即销毁&#xff0c;而是等待下一个任务。 二、为什么要使用线程池? 线程池的作用&#xff1f; 1、降低资源…

【大数据】Flink 详解(二):核心篇 Ⅲ

Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅲ 29、Flink 通过什么实现可靠的容错机制&#xff1f; Flink 使用 轻量级分布式快照&#xff0c;设计检查点&#xff08;checkpoint&#xff09;实现可靠容错。 30、什么是 Checkpoin 检查点&#xff1f; Checkpoint …

四化智造MES(API)与金蝶云星空对接集成派工作业打通生产订单新增

四化智造MES&#xff08;API&#xff09;与金蝶云星空对接集成派工作业打通生产订单新增 对接系统&#xff1a;四化智造MES&#xff08;API&#xff09; MES建立统一平台上通过物料防错防错、流程防错、生产统计、异常处理、信息采集和全流程追溯等精益生产和精细化管理&#x…

mybatis如何生成和执行动态sql

文章目录 1. 相关代码2. SQL 语句解析全流程2.1 涉及到的重要类2.2 解析标签2.2.1 \<include>2.2.2 \<selectKey>2.2.3 处理 SQL 语句 3. 获取真正执行的sql 1. 相关代码 package com.boge.mapper;import com.boge.pojo.User;import java.util.List;public interf…

情感资源日记Resource Diary

什么是 Resource Diary &#xff1f; Resource Diary 是自托管的情感资源日记&#xff0c;允许用户跟踪特定任务的情感反应以进行趋势识别。 按照作者的设计&#xff0c;对每个任务&#xff0c;通过 /- 号来表达任务完成后的情绪&#xff0c;等级从 0 到 5 &#xff0c;其中&am…

大语言模型之三 InstructGPT训练过程

大语言模型 GPT历史文章中简介的大语言模型的的发展史&#xff0c;并且简要介绍了大语言模型的训练过程&#xff0c;本篇文章详细阐述训练的细节和相关的算法。 2020年后全球互联网大厂、AI创业公司研发了不少AI超大模型&#xff08;百亿甚至千亿参数&#xff09;&#xff0c;…

2023年中国政务云行业发展概况及发展趋势分析:政务云由基础设施建设向云服务运营转变[图]

政务云是指运用云计算技术&#xff0c;统筹利用已有的机房、计算、存储、网络、安全、应用支撑、信息资源等&#xff0c;发挥云计算虚拟化、高可靠性、高通用性、高可扩展性及快速、按需、弹性服务等特征&#xff0c;为政府行业提供基础设施、支撑软件、应用系统、信息资源、运…

QGIS3.28的二次开发六:VS不借助QT插件创建UI界面

上一篇博客我们说了在VS中如何使用QT插件来创建UI界面&#xff0c;但是我们二次开发QGIS的第一篇博客就说了&#xff0c;最好使用OSGeo4W中自动下载的QT进行QGIS二次开发&#xff0c;这样兼容性是最好的&#xff0c;那么该如何在VS中不使用外部安装的QT以及QT的VS插件情况下进行…

使用 LangChain 构建 LLM 应用详细教程(附python代码演练)

介绍 欢迎来到语言处理的未来&#xff01;在一个语言是连接人与技术的桥梁的世界中&#xff0c;自然语言处理&#xff08;NLP&#xff09;的进步为我们带来了令人难以置信的机会。其中一个重要的进步是革命性的语言模型&#xff0c;即大型语言模型&#xff08;LLM&#xff09;&…

图解java.util.concurrent并发包源码系列——Condition条件等待队列深入详解

图解java.util.concurrent并发包源码系列——Condition条件等待队列深入详解 Condition的作用Condition的原理Condition源码Condition的定义和Condition对象的获取await方法addConditionWaiter方法unlinkCancelledWaiters方法 fullyRelease方法isOnSyncQueue方法checkInterrupt…