从零学Java List集合

news2024/10/5 13:48:43

Java List集合

文章目录

  • Java List集合
    • 1 List 集合
    • 2 List实现类
      • 2.1 ArrayList【重点】
      • 2.2 LinkedList
      • 2.3 Vector (已废弃)
    • 3 数据结构: 栈, 队列

1 List 集合

特点:有序、有下标、元素可以重复。

  • 有序: 添加与遍历的顺序是一致的;
  • 有下标: 可以使用普通for循环;
  • 元素可以重复的

常用方法

  • void add(int index, Object o) //在index位置插入对象o。
  • boolean addAll(int index, Collection c) //将一个集合中的元素添加到此集合中的index位置。
  • Object get(int index) //返回集合中指定位置的元素。
  • List subList(int fromIndex, int toIndex) //返回fromIndex和toIndex之间的集合元素。

eg : 存储字符串(基础数据)

public class TestArrayList {
    public static void main(String[] args) {
        //创建List集合
        List list = new ArrayList();
        List list1 = new ArrayList();
        //1 添加单个元素
        list.add("苹果");
        list.add("葡萄");
        list.add("香蕉");
        list.add("橘子");
        list.add(0,"榴莲");
        list1.add("西瓜");
        list1.add("桃子");
        System.out.println("元素个数: "+list.size());
        System.out.println("打印: "+list);
        //1.1 添加整个List集合
        list.addAll(list1);
        System.out.println("添加整个List集合后元素个数: "+list.size());
        System.out.println("打印: "+list);
        //2 删除
        list.remove("苹果");
        list.remove(3);
        System.out.println("删除之后: "+list);
        //2.1 清空
        System.out.println("清空前: "+list1);
        list1.clear();
        System.out.println("清空后: "+list1);
        //3 遍历
        //3.1 增强for
        System.out.println("-----增强for-----");
        for (Object o : list) {
            System.out.println(o);
        }
        //3.2 普通for
        System.out.println("-----普通for-----");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //3.3 迭代器
        System.out.println("-----迭代器-----");
        Iterator it = list.iterator();
        while (it.hasNext()) {
            Object next = it.next();
            System.out.println(next);
        }
        /*
            3.4 列表迭代器
            可以从前向后,也可以从后向前
            可以添加,修改,删除元素
        */
        //创建列表迭代器, 初始指针在列表首位
        ListIterator lit = list.listIterator();
        System.out.println("-----列表迭代器-----");
        System.out.println("-----正向-----");
        while (lit.hasNext()) {
            System.out.println(lit.nextIndex() + "...." + lit.next());
        }
        //需要指针在列表最后
        //ListIterator lit = list.listIterator(list.szie());
        System.out.println("-----逆向-----");
        while (lit.hasPrevious()) {
            System.out.println(lit.previousIndex() + "...." + lit.previous());
        }
        //4 判断
        //4.1 查找目标元素, 返回boolean值
        System.out.println(list.contains("葡萄"));
        //4.2 判断列表是否为空, 返回boolean值
        System.out.println(list.isEmpty());
        //5 获取
        //5.1 获取下标
        System.out.println(list.indexOf("葡萄"));
        //5.2 获取子集, 指定开始位置和结束位置, 含头不含尾
        System.out.println(list.subList(2, 5));
    }
}

eg : 存储对象数据

public class TestList1 {
    //静态内部类
    static class Student {
        String name;
        int age;

        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
		//重写toString方法
        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
		//重写equals方法
        @Override
        public boolean equals(Object obj) {
            if (obj == null) {
                return false;
            }
            if (this == obj) {
                return true;
            }
            if (obj instanceof Student) {
                Student stu = (Student) obj;
                return this.name.equals(stu.name) && this.age == stu.age;
            }
            return false;
        }
    }

    public static void main(String[] args) {
        //创建List集合
        List list = new ArrayList();
        Student s1 = new Student("张三",18);
        Student s2 = new Student("李四",26);
        Student s3 = new Student("王五",21);
        //1 添加元素
        list.add(s1);
        list.add(s2);
        list.add(s3);
        System.out.println("元素个数: "+ list.size());
        System.out.println("元素: "+list);
        //2 删除, 删除的依据是进行equals()方法
//        list.remove(s1);
//        list.remove(new Student("张三",18));
//        list.remove(0);
//        System.out.println("删除后: "+list);
//        list.clear();
        //3 遍历
        //3.1 增强for
        System.out.println("-----增强for-----");
        for (Object o : list) {
            System.out.println(o);
        }
        //3.2 普通for
        System.out.println("-----普通for-----");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //3.3 迭代器
        System.out.println("-----迭代器-----");
        Iterator it = list.iterator();
        while (it.hasNext()) {
            Object next = it.next();
            System.out.println(next);
        }
        /*
            3.4 列表迭代器
            可以从前向后,也可以从后向前
            可以添加,修改,删除元素
        */
        //创建列表迭代器, 初始指针在列表首位
        ListIterator lit = list.listIterator();
        System.out.println("-----列表迭代器-----");
        System.out.println("-----正向-----");
        while (lit.hasNext()) {
            System.out.println(lit.nextIndex() + "...." + lit.next());
        }
        //需要指针在列表最后
        System.out.println("-----逆向-----");
        while (lit.hasPrevious()) {
            System.out.println(lit.previousIndex() + "...." + lit.previous());
        }
        //4 判断, 根据equals()方法
        //4.1 查找目标元素, 返回boolean值
        System.out.println(list.contains(new Student("李四",26)));
        //4.2 判断列表是否为空, 返回boolean值
        System.out.println(list.isEmpty());
        //5 获取, 根据equals()方法
        //5.1 获取下标
        System.out.println(list.indexOf(s3));
        //5.2 获取子集, 指定开始位置和结束位置, 含头不含尾
        System.out.println(list.subList(0,2));
    }
}

2 List实现类

2.1 ArrayList【重点】

特点:

  • 数组结构实现,查询快、增删慢;
  • JDK1.2版本,运行效率快、线程不安全。

ArrayList源码分析:

  • 如果没有向集合中添加任何元素时,容量0,添加一个元素之后,容量扩容为10
  • 每次扩容大小是原来的1.5倍
  • elementData存放元素的数组
  • size 实际元素个数

2.2 LinkedList

特点:

  • 双向链表结构实现,增删快(仅指针的变动),查询慢。

结构图:

在这里插入图片描述

2.3 Vector (已废弃)

特点:

  • 数组结构实现。
  • JDK1.0版本,运行效率慢、线程安全。

3 数据结构: 栈, 队列

栈:是一种先进后出的数据结构。

  • Stack类:继承Vector类
    • push方法入栈、pop方法出栈
  • LinkedList也实现了栈结构

eg:

public class TestStack {
    public static void main(String[] args) {
        //栈, 是一种先进后出的数据结构
        //Stack stack = new Stack();
        LinkedList stack = new LinkedList();
        //进栈
        stack.push("aaa");
        stack.push("bbb");
        stack.push("ccc");

        //出栈
        int count = stack.size();
        for (int i = 0; i < count; i++) {
            System.out.println(stack.pop());
        }
    }
}

队列:是一种先进先出的数据结构。

  • Queue接口:继承Collection接口
  • offer方法入队、poll方法出队
  • LinkedList实现了Queue接口

eg:

public class TestQueue {
    public static void main(String[] args) {
        //队列, 是一种先进先出的数据结构
        //创建队列
        Queue queue = new LinkedList();
        //进队
        queue.offer("aaa");
        queue.offer("bbb");
        queue.offer("ccc");
        //出队
        int count = queue.size();
        for (int i = 0; i < count; i++) {
            System.out.println(queue.poll());
        }
    }
}

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

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

相关文章

【NLP】多标签分类【上】

简介 《【NLP】多标签分类》主要介绍利用三种机器学习方法和一种序列生成方法来解决多标签分类问题&#xff08;包含实验与对应代码&#xff09;。共分为上下两篇&#xff0c;上篇聚焦三种机器学习方法&#xff0c;分别是&#xff1a;Binary Relevance (BR)、Classifier Chain…

实用Unity3D Log打印工具XDebug

特点 显示时间&#xff0c;精确到毫秒显示当前帧数&#xff08;在主线程中的打印才有意义&#xff0c;非主线程显示为-1&#xff09;有三种条件编译符(如下图) 注&#xff1a;要能显示线程中的当前帧数&#xff0c;要在app启动时&#xff0c;初始化mainThreadID字段条件编译符…

在App Store Connect上编辑多个用户的访问权限

作为一名编程新手&#xff0c;在App Store Connect中管理用户权限可能初听起来有些复杂&#xff0c;但实际上它是一个相对直接的过程。这里是一个步骤清晰的指南来帮助您在App Store Connect上编辑多个用户的访问权限。 App Store Connect 简介 在开始之前&#xff0c;让我们先…

爬虫网易易盾滑块及轨迹算法案例:某乎

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、滑块初步分析 js运行 atob(‘aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbg’) 拿到网址&#xff0c;浏览器打开网站&#xff0…

【低照度图像增强系列(3)】EnlightenGAN算法详解与代码实现

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…

如何降低成本,制作个性化电子产品宣传册呢

​随着科技的飞速发展&#xff0c;电子产品已经深入到我们生活的每一个角落。然而&#xff0c;如何让你的产品在众多竞争者中脱颖而出呢&#xff1f;制作一份个性化的宣传册&#xff0c;不仅可以吸引潜在客户&#xff0c;还能有效降低成本&#xff0c;提升销售效果。 一、明确目…

基于JAVA+SpringBoot的高校学术报告系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 智慧高校学术报告系统…

职场日常英语口语,成人英语培训学校,柯桥学英语推荐哪里

“玩手机”用英语怎么说&#xff1f;你的第一反应是不是&#xff1a;play the phone&#xff1f; 在英语中&#xff0c;play这个动词通常表示“玩耍、娱乐、操纵”等意思&#xff0c;而手机是一种工具&#xff0c;不是玩耍的对象。 换句话说&#xff0c;我们“玩手机”&#xf…

CUDA编程:执行模型

SM 在SM中&#xff0c;共享内存和寄存器是非常重要的资源。共享内存被分配在SM上的常驻线程 块中&#xff0c;寄存器在线程中被分配。线程块中的线程通过这些资源可以进行相互的合作和通 信。 WARP CUDA采用单指令多线程&#xff08;SIMT&#xff09;架构来管理和执行线程&am…

机器学习中的隐马尔可夫模型及Python实现示例

隐马尔可夫模型&#xff08;HMM&#xff09;是一种统计模型&#xff0c;用于描述观测序列和隐藏状态序列之间的概率关系。它通常用于生成观测值的底层系统或过程未知或隐藏的情况&#xff0c;因此它被称为“隐马尔可夫模型”。 它用于根据生成数据的潜在隐藏过程来预测未来的观…

跟我学java|Stream流式编程——并行流

什么是并行流 并行流是 Java 8 Stream API 中的一个特性。它可以将一个流的操作在多个线程上并行执行&#xff0c;以提高处理大量数据时的性能。 在传统的顺序流中&#xff0c;所有的操作都是在单个线程上按照顺序执行的。而并行流则会将流的元素分成多个小块&#xff0c;并在多…

【Java集合篇】 ConcurrentHashMap在哪些地方做了并发控制

ConcurrentHashMap在哪些地方做了并发控制 ✅典型解析✅初始化桶阶段&#x1f7e2;桶满了会自动扩容吗&#x1f7e0;自动扩容的时间频率是多少 ✅put元素阶段✅扩容阶段&#x1f7e0; 拓展知识仓&#x1f7e2;ConcurrentSkipListMap和ConcurrentHashMap有什么区别☑️简单介绍一…

2024年第九届计算机与通信系统国际会议(ICCCS2024) ,邀您相约西安!

会议官网: ICCCS2024 | Xian China 时间: 2024年4月19-22日 地点: 中国西安 会议简介&#xff1a; 近年来&#xff0c;信息通信在不断发展&#xff0c;为计算机网络的进步与发展提供了先进可靠的技术支持。随着计算机网络与通信技术的深入发展&#xff0c;计算机通信技术、数…

报错解决:RuntimeError: Error building extension ‘bias_act_plugin‘

系统&#xff1a; Ubuntu22.04&#xff0c; nvcc -V&#xff1a;11.8 &#xff0c; torch&#xff1a;2.0.0cu118 一&#xff1a;BUG内容 运行stylegan项目的train.py时遇到报错&#x1f447; Setting up PyTorch plugin "bias_act_plugin"... Failed! /home/m…

docker+jmeter实现windows作为主控机,linux作为负载机的分布式压测环境搭建

dockerjmeter实现windows作为主控机&#xff0c;linux作为负载机的分布式压测环境搭建 1、搭建环境说明2、windows主控机安装Jmeter3、linux负载机安装Jmeter3.1、安装docker环境3.2、使用docker安装jmeter 4、windows主控机分发测试任务 1、搭建环境说明 准备一台windows主机…

京东(天猫淘宝)数据分析工具-鲸参谋系统全功能解析——行业大盘、红蓝海市场、品牌分析、店铺分析、商品分析、竞品监控(区分自营和POP)

作为第三方电商数据平台&#xff0c;鲸参谋电商大数据系统能够为品牌方和商家提供包括行业趋势、热门品牌、店铺分析、单品分析在内的多个层面数据分析&#xff0c;帮助商家做出更加准确的经营决策&#xff0c;提升经营效率&#xff0c;实现精准营销。 下面&#xff0c;我们针…

YOLOv8优化策略:轻量化改进 | 超越RepVGG!浙大阿里提出OREPA:在线卷积重参数化

🚀🚀🚀本文改进:在线卷积重参数化巧妙的和YOLOV8结合,并实现轻量化 🚀🚀🚀YOLOv8改进专栏:http://t.csdnimg.cn/hGhVK 学姐带你学习YOLOv8,从入门到创新,轻轻松松搞定科研; 1.OREPA介绍 论文:https://arxiv.org/pdf/2204.00826.pdf 摘要:结构重新参数化在…

软件测试|Python Selenium 库安装使用指南

简介 Selenium 是一个用于自动化浏览器操作的强大工具&#xff0c;它可以模拟用户在浏览器中的行为&#xff0c;例如点击、填写表单、导航等。在本指南中&#xff0c;我们将详细介绍如何安装和使用 Python 的 Selenium 库。 安装 Selenium 库 使用以下命令可以通过 pip 安装…

内网渗透之CobaltStrike(CS)

目录 一、Cobalt Strike简介 二、Cobalt Strike基本用法 1、启动服务端 2、客户端连接 3、设置监听器&#xff08;Listeners&#xff09; 4、脚本管理器&#xff08;Script Manager&#xff09; 5、攻击&#xff08;最常用的是生成后门&#xff09; 6、CS上线 7、Beaco…

图神经网络 7大高效创新思路分享,附17篇最新顶会论文和代码

2024年了&#xff0c;图神经网络方向还好发论文吗&#xff1f;答案当然是能。 图神经网络在处理非欧空间数据和复杂特征方面具有明显的优势&#xff0c;且已成为了深度学习领域的热点&#xff0c;在学术界和工业界都有着广泛的研究和应用。不仅如此&#xff0c;图神经网络与CV…