30.0/集合/ArrayList/LinkedList

news2024/9/29 19:30:54

目录

30.1什么是集合?

30.1.2为什么使用集合

30.1.3自己创建一个集合类

30.1.3 集合框架有哪些?

 30.1.2使用ArrayList集合

30.2增加元素

 30.3查询的方法

30.4删除

30.5 修改

30.6泛型


30.1什么是集合?

  1. 我们之前讲过数组,数组中它也可以存放多个元素。
  2. 集合就是一个容器,里面可以存放若干个元素。

30.1.2为什么使用集合

数组的长度是固定,而且数组中数据类型必须统一。

int[] arr=new int[10];

引入了集合。可以存放。

集合它是一个类,只是该类中存在增加元素,删除元素,修改元素,统计元素的个数等方法。

30.1.3自己创建一个集合类

它也可以无限的增加元素,增加任意类型的元素。

package demo01;

import java.util.Arrays;


public class MyArray {
    //存放集合元素的
    private Object [] arr=new Object[3];
    //表示集合中元素的个数
    private int size;
    /**
     * 添加元素
     * @param o
     */
    public void add(Object o){
         //判断数组是否已满。
         if(size==arr.length){
             //扩容--并把原来数组中得元素放入新数组
            arr=Arrays.copyOf(arr,arr.length*2);
         }
         arr[size]=o;
         size++;
    }

    /**
     * 根据下标获取指定元素
     * @param index
     * @return
     */
    public Object get(int index){
        if(index<0||index>=size){
            throw new RuntimeException("给定下标越界");
        }
        return arr[index];
    }

    //获取集合的长度--元素的个数
    public int size(){
        return size;
    }
}

你都可以想到创建一个类,该类可以不断的增加元素,jdk官方一定也会想到创建一个类,可以不断的增加元素。官方会根据不同的数据结构创建不同的类。而官方提供的这些类---集合框架。

30.1.3 集合框架有哪些?

 底层也是使用数组。允许元素重复,而且根据下标获取元素,查询效率非常高。删除和添加慢。


 30.1.2使用ArrayList集合

必须创建该类的对象。

public  ArrayList(){}  默认分配数组的个数10个
public ArrayList(int size){} 人为指定数组元素的个数

30.2增加元素

public class Test02 {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add("java01");
        list.add("java02");
        list.add(15);
        list.add(25.6);
        list.add(true);//往集合尾部追加。

        list.add(3,"欧炜健");
        list.add(3,"赖林龙");

        System.out.println(list);


    }
}

 30.3查询的方法

package demo02;

import java.util.ArrayList;
import java.util.Objects;


public class Test {
    public static void main(String[] args) {
        ArrayList list=new ArrayList();
        list.add(new People("赖林龙",18));
        list.add(new People("胡荣纯",17));
        list.add(new People("吴韩煜",19));
        list.add(new People("赖林龙",18));

        boolean is = list.contains(new People("胡荣纯", 17));
        System.out.println(is); //equals方法比较。

        int i = list.indexOf(new People("吴韩煜", 19));
        System.out.println("第一次出现的位置:"+i);

        //求集合中元素的个数:
        int size = list.size();
        System.out.println("集合中元素的个数:"+size);

        //遍历集合
        for(int a=0;a<list.size();a++){
            Object o = list.get(a);
            System.out.println(o);
        }

        System.out.println("=================================增强循环==========================");
        for (Object o : list) {
            System.out.println(o);
        }

    }
}
class People{
    private String name;
    private int age;

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

    @Override
    public boolean equals(Object o){
        //this//表示调用当前方法的对象
        //重写equals
        if(this==o){
            return true;
        }
        if(! (o instanceof People)){
            return false;
        }
        People p= (People) o;
        if(p.getAge()==this.getAge()&&p.getName().equals(this.getName())){
            return true;
        }
        return false;

    }

    public People() {
    }

    public People(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;
    }
}

定义一个学生类: name,school,age

创建一个集合对象ArrayList. 里面存放5个学生。

<1>判断某个学生对象是否在集合中

<2>查看指定学生第一次在集合中出现的位置

<3>求集合中元素的个数

<4>遍历集合---使用两种方式

30.4删除

ArrayList list=new ArrayList();
        list.add(new People("赖林龙",18));
        list.add(new People("胡荣纯",17));
        list.add(new People("吴韩煜",19));
        list.add(new People("赖林龙",18));
        list.add(new People("吴韩煜",19));

        list.remove(3);//根据下标删除指定的元素
        list.remove(new People("吴韩煜",19));//根据内容移除,第一个。
        list.clear();//清空内容

        System.out.println("=================================增强循环==========================");
        for (Object o : list) {
            System.out.println(o);
        }

30.5 修改

ArrayList list=new ArrayList();
        list.add(new People("赖林龙",18));
        list.add(new People("胡荣纯",17));
        list.add(new People("吴韩煜",19));
        list.add(new People("赖林龙",18));
        list.add(new People("吴韩煜",19));

        list.set(2,new People("张学友",16));//修改指定位置上的内容
        List list1 = list.subList(1, 3); //截取集合
        System.out.println(list1);

30.6泛型

 <E>:表示泛型标识符---在创建类对象时指定数据类型,如果没有指定那么该类型为Object.

public class Test03 {
    public static void main(String[] args) {
        //规定集合中存放的数据类型。--获取元素是就是对应的类型。
        ArrayList<People> list=new ArrayList<>();
        list.add(new People("赖林龙",18));
        list.add(new People("胡荣纯",17));
        list.add(new People("吴韩煜",19));
        list.add(new People("无效五",19));
        list.add(new People("赖林龙",18));
        list.add(new People("吴志雄",18));
        list.add(new People("吴韩煜",19));
        list.add(new People("吴三桂",18));

        //找到集合中所有姓吴的
        for (People people : list) {
            boolean b = people.getName().startsWith("吴");
            if(b){
                System.out.println(people);
            }
        }
    }
}

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

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

相关文章

C++基础 -6-二维数组,数组指针

二维数组在内存中的存放方式和一维数组完全相同 下表把二维数组抽象成了行列形式方便理解 a[0]指向第一行首元素地址 a指向第一行的首地址 所以a地址和a[0]地址相同,因为起点相同 但a[0]1往右偏移 但a1往下方向偏移 方便理解 an控制行 a[0]n控制列(相当于*an) 数组指针指向二…

【EI会议投稿】第四届物联网与智慧城市国际学术会议(IoTSC 2024)

第四届物联网与智慧城市国际学术会议 2024 4th International Conference on Internet of Things and Smart City 继IoTSC前三届的成功举办&#xff0c;第四届物联网与智慧城市国际学术会议&#xff08;IoTSC 2024&#xff09;将于2024年3月22-24日在河南洛阳举办。 智慧城市的…

Redis常用操作及应用(二)

一、Hash结构 1、常用操作 HSET key field value //存储一个哈希表key的键值 HSETNX key field value //存储一个不存在的哈希表key的键值 HMSET key field value [field value ...] //在一个哈希表key中存储多个键值对 HGET key fie…

二叉树OJ题讲解之一

今天我们一起来做一道初级的二叉树OJ题&#xff0c;都是用递归思想解答 力扣965.单值二叉树 链接https://leetcode.cn/problems/univalued-binary-tree/description/ 所谓单值二叉树就是这棵二叉树的所有节点的值是相同的&#xff0c;那我们要做这道题&#xff0c;肯定要…

sql注入靶场

第一关&#xff1a; 输入&#xff1a;http://127.0.0.1/sqli-labs-master/Less-1/?id1 http://127.0.0.1/sqli-labs-master/Less-1/?id1%27 http://127.0.0.1/sqli-labs-master/Less-1/?id1%27-- 使用--来闭合单引号&#xff0c;证明此处存在字符型的SQL注入。 使用order …

mybatis collection 错误去重

一、需求背景 一条银行产品的需求&#xff0c;不同阶段&#xff0c;可能对应不同的银行(也有可能是同一个银行处理不同的阶段)去处理&#xff0c;如&#xff1a; 发布阶段: —> A银行处理立项阶段: —> B银行处理审核阶段: —> A银行处理出账阶段: —> C银行处理 …

第二十章——多线程

Windows操作系统是多任务操作系统&#xff0c;它以进程为单位。一个进程是一个包含有自身地址的程序&#xff0c;每个独立执行的程序都称为进程。也就是说每个正在执行的程序都是一个进程。系统可以分配给每一个进程有一段有限的使用CPU的时间&#xff08;也可以称为CPU时间片&…

YOLOv8独家原创改进: AKConv(可改变核卷积),即插即用的卷积,效果秒杀DSConv | 2023年11月最新发表

💡💡💡本文全网首发独家改进:可改变核卷积(AKConv),赋予卷积核任意数量的参数和任意采样形状,为网络开销和性能之间的权衡提供更丰富的选择,解决具有固定样本形状和正方形的卷积核不能很好地适应不断变化的目标的问题点,效果秒殺DSConv 1)AKConv替代标准卷积进行…

第二十章总结

继承Thread 类 Thread 类时 java.lang 包中的一个类&#xff0c;从类中实例化的对象代表线程&#xff0c;程序员启动一个新线程需要建立 Thread 实例。 Thread 对象需要一个任务来执行&#xff0c;任务是指线程在启动时执行的工作&#xff0c;start() 方法启动线程&…

什么是交流负载的特点和特性?

交流负载往往存在不平衡的特性&#xff0c;即三相电流和电压的幅值和相位存在差异。这是由于不同负载的性质和使用情况不同导致的&#xff0c;交流负载的功率因数是描述负载对电网的有功功率需求和无功功率需求之间关系的重要参数。功率因数可以分为正功率因数和负功率因数&…

希尔伯特和包络变换

一、希尔伯特变换 Hilbert Transform&#xff0c;数学定义&#xff1a;在数学与信号处理的领域中&#xff0c;一个实值函数的希尔伯特变换是将信号x(t)与h(t)1/(πt)做卷积&#xff0c;以得到其希尔伯特变换。因此&#xff0c;希尔伯特变换结果可以理解为输入是x(t)的线性时不…

仓库代码迁移,从一个仓库迁移到另一个仓库

A-B 1、在B创建一个新的远程仓库 2、 git clone <原Git仓库地址>git remote add origin1 <新Git仓库地址>git push -u origin1 masterorigin1自定义&#xff0c;上下保持一致

机器视觉中精度和分辨率详解!

在机器视觉中&#xff0c;分辨率作为衡量镜头和工业相机的重要参数&#xff0c;被大家熟知。精度是机器视觉中最核心的参数之一。我们一起来了解下这两个参数以及在实际组合应用中&#xff0c;如何有效匹配镜头分辨率和相机分辨率。 精度需要从多个角度来说明&#xff0c;根据…

免费部署开源大模型 ChatGLM-6B

参考&#xff1a;【大模型-第一篇】在阿里云上部署ChatGLM3-CSDN博客 ChatGLM 是一个开源的、支持中英双语的对话语言模型&#xff0c;由智谱 AI 和清华大学 KEG 实验室联合发布&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。ChatGLM3-6B 更…

家政预约服务管理系统,轻松搭建专属家政小程序

家政预约服务管理系统&#xff0c;轻松搭建专属家政小程序app&#xff1b; 家政服务app开发架构包括&#xff1a; 1. 后台管理端&#xff1a;全面管理家政服务、门店、员工、阿姨信息、订单及优惠促销等数据&#xff0c;并进行统计分析。 2. 门店端&#xff1a;助力各门店及员工…

Windows平台下的oracle 11G-11.2.0.4补丁升级操作指南

序号 文件名称 文件说明 1 p6880880_112000_MSWIN-x86-64_OPatch 11.2.0.3.33 for DB 11.2.0.0.0 (Feb 2022) 用于升级 OPatch 2 DB_PSU_11.2.0.4.220118 (Jan 2022)_p33488457_112040_MSWIN-x86-64 主要补丁文件 注意&#xff1a;请用管理员权限运行文件内命令&#…

涂料行业ERP有哪些?涂料行业ERP怎么样

涂料这类产品的生产、包装、存储、运输等方面有特殊的管理要求&#xff0c;有些涂料企业在辅料、原料、半成品、成品、仓库、加工、设备等方面的管理存在不少问题。 如何清晰掌握库存数据&#xff0c;实时了解和掌握经营情况&#xff0c;减少库存过多带来的资金压力和材料浪费…

【代码】基于卷积神经网络(CNN)-支持向量机(SVM)的分类预测算法

程序名称&#xff1a;基于卷积神经网络&#xff08;CNN&#xff09;-支持向量机&#xff08;SVM&#xff09;的分类预测算法 实现平台&#xff1a;matlab 代码简介&#xff1a;CNN-SVM是一种常用的图像分类方法&#xff0c;结合了卷积神经网络&#xff08;CNN&#xff09;和支…

ubuntu配置免密登录vscode

1、配置免密登录 &#xff08;1&#xff09;在windows系统cmd下运行命令 ssh-keygen 一路回车&#xff0c;将会在C:\Users\用户名\.ssh目录下生成两个文件&#xff1a;id_rsa和id_rsa.pub。如下图所示。 &#xff08;2&#xff09;进入.ssh目录。如果想使用root用户&#xff0…

【刷题笔记】H指数||数组||二分查找的变体

H指数 1 题目描述 https://leetcode.cn/problems/h-index/ 给你一个整数数组 citations &#xff0c;其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义&#xff1a;h 代表“高引用次数” &#xff0c;一…