Java List集合

news2024/12/23 17:06:00

6 List集合

  • List系列集合:添加的元素是有序,可重复,有索引
    • ArrayList: 添加的元素是有序,可重复,有索引
    • LinkedList: 添加的元素是有序,可重复,有索引
    • Vector :是线程安全的,速度慢,开发中很少使用

6.1 List集合概述和特点

List集合概述
1、有序集合(也称为序列),用户可以精确控制列表中每个元索的插入位置。用户可以通过整数索引访问元素,并获取列表中的元素
2、与Set集合不同,List集合允许重复的元素

List集合特点
1、有序: 存储和取出的元素顺序一致
2、可重复: 存储的元素可以重复

package ceshi;

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

public class ListDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<String> list = new ArrayList<>();

        //添加元素
        list.add("java");
        list.add("天下");
        list.add("无敌");
        list.add("java");

        System.out.println(list); //[java, 天下, 无敌, java]

        //迭代器遍历
        Iterator<String> it = list.iterator();
        while(it.hasNext()) {
            String s = it.next();
            System.out.println(s);
            /*java
            天下
            无敌
            java*/
        }
    }
}

6.2 List集合的特有方法

方法名说明
public void add(int index,E element)该集合中的指定位置上插入元素
public E remove(int index)删除列表中指定位置的元素,返回被删除的元素
public E set(int index,E element)修改指定索引的元素,返回被修改的元素
public E get(int index)返回集合中指定位置的元素
package ceshi;

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

public class ListDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<String> list = new ArrayList<>();

        //添加元素
        list.add("java");
        list.add("天下");
        list.add("无敌");
        list.add("java");
        System.out.println(list); //[java, 天下, 无敌, java]

        //1、public void add(int index,E element) 	该集合中的指定位置上插入元素
        list.add(1,"javase");
        System.out.println(list); //[java, javase, 天下, 无敌, java]

        //2、public E remove(int index) 	删除列表中指定位置的元素,返回被删除的元素
        System.out.println(list.remove(1)); //javase
        System.out.println(list); //[java, 天下, 无敌, java]

        //3、public E set(int index,E element) 	修改指定索引的元素,返回被修改的元素
        System.out.println(list.set(0,"java1")); //java
        System.out.println(list); //[java1, 天下, 无敌, java]

        //4、public E get(int index) 	返回集合中指定位置的元素
        System.out.println(list.get(2)); //无敌

        //for循环遍历
        for(int i=0;i< list.size();i++) {
        	//5,public E get(int index)	返回集合中指定位置的元素
            String s = list.get(i);
            System.out.println(s);
            /*java1
            天下
            无敌
            java*/
        }
    }
}
  • 案例
    在这里插入图片描述

  • 测试类

package ceshi;

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

public class ListDemo {
    public static void main(String[] args) {
        //2、创建集合对象
        List<Student> list = new ArrayList<Student>();
        //3、创建学生对象
        Student s1 = new Student("y1",10);
        Student s2 = new Student("y2",20);
        Student s3 = new Student("y3",30);
        //4、学生对象添加到集合
        list.add(s1);
        list.add(s2);
        list.add(s3);

        //5、遍历集合:迭代器方法
        Iterator<Student> it = list.iterator();
        while(it.hasNext()) {
            Student s = it.next();
            System.out.println(s.getName()+","+s.getAge());
            /*y1,10
            y2,20
            y3,30*/
        }

        //5、遍历集合:for循环
        for(int i=0;i<list.size();i++) {
            Student ss = list.get(i);
            System.out.println(ss.getName()+","+ss.getAge());
            /*y1,10
            y2,20
            y3,30*/
        }
    }
}

6.3 ListIterator迭代器

  • Lstlterator:列表迭代器
    • 通过List集合的listterator()方法得到,所以说它是List集合特有的迭代器
    • 用于允许程序员沿任一方向遍历列表的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置
  • 常用方法
方法名说明
list.listIterator()得到 listIterator 迭代器
E next()返回迭代中的下一个元素
boolean hasNext()如果迭代具有更多元素,则返回true
E previous() [ˈpriːviəs]返回列表中的上一个元素
boolean hasPrevious()如果此列表迭代器在相反方向遍历列表时具有更多元索,则返回true
void add(E e)将指定的元索插入列表
package ceshi;

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

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

        list.add("java");
        list.add("python");
        list.add("scala");

        //通过list集合的listIterator() 方法得到迭代器
        /*ListIterator<String> lit = list.listIterator();
        while(lit.hasNext()) {
            String s = lit.next();
            System.out.println(s);
            *//*java
            python
            scala*//*
        }
        System.out.println("---------");

        //逆向遍历
        *//*E previous0 	返回列表中的上一个元素
        boolean hasPrevious() 	如果此列表迭代器在相反方向遍历列表时具有更多元索,则返回true*//*
        while(lit.hasPrevious()) {
            String s = lit.previous();
            System.out.println(s);
            *//*scala
            python
            java*//*
        }*/

        //获取列表迭代器
        ListIterator<String> lit = list.listIterator();
        while(lit.hasNext()) {
            String s = lit.next();
            if(s.equals("java")) {
                lit.add("world");
            }
        }
        System.out.println(list); //[java, world, python, scala]
    }
}

6.4 foreach(增强for循环)

增强for:简化数组和Collection集合的遍历

  • 实现Iterable接口的类允许其对象成为增强型 for语句的目标
  • 它是JDK5之后出现的,其内部原理是一个Iterator迭代器
  • 格式
for(元素类型  变量名: 数组名或collection集合){ 
    
}
//范例
int[] arr = {1,2,3,4,5};
for(int i : arr) {
	System.out.println(i);
}
  • 范例:
package ceshi;

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

public class ForDemo {
    public static void main(String[] args) {
        //int类型数组
        int[] arr = {1,2,3,4,5};
        for(int i : arr) {
            System.out.println(i);
            /*
            1
            2
            3
            4
            5*/
        }
        //String类型数组
        String[] strArray = {"java","python","scala"};
        for(String s : strArray) {
            System.out.println(s);
            /*java
            python
            scala*/
        }

        //集合
        List<String> list = new ArrayList<>();
        list.add("y1");
        list.add("y2");
        list.add("y3");
        for(String lt:list) {
            System.out.println(lt);
            /*y1
            y2
            y3*/
        }

        //判断:内部原理是一个Iterator迭代器
        for(String s:list) {
            if(s.equals("y1")) {
                list.add("y4"); //ConcurrentModificationException:并发修改异常
            }
        }
    }
}

6.5 案例:List集合存储学生对象用三种方式遍历

在这里插入图片描述

  • 测试类
package ceshi;

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

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

        Student s1 = new Student("y1",10);
        Student s2 = new Student("y2",20);
        Student s3 = new Student("y3",30);

        list.add(s1);
        list.add(s2);
        list.add(s3);

        //迭代器方式
        Iterator<Student> it = list.iterator();
        while(it.hasNext()) {
            Student s = it.next();
            System.out.println(s.getName()+","+s.getAge());
        }
        System.out.println("----------");


        //for带索引方式
        for(int i =0;i<list.size();i++) {
            Student s = list.get(i);
            System.out.println(s.getName()+","+s.getAge());
        }
        System.out.println("----------");

        //增强for
        for(Student s: list) {
            System.out.println(s.getName()+","+s.getAge());
        }
    }
}

6.6 List集合子类特点

  • ArrayList:底层数据结构数组实现,查询快增删慢
  • LinkedList:底层数据结构链表实现,查询慢增删快
  • 范例:分别用ArrayList和LinkedList存储字符串并遍历
package ceshi;

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

public class ListDemo {
    public static void main(String[] args) {
        //1、创建ArrayList集合对象
        ArrayList<String> arraylist = new ArrayList<>();
        arraylist.add("java");
        arraylist.add("python");
        arraylist.add("scala");

        //增强for
        for(String s: arraylist) {
            System.out.println(s);
        }
        System.out.println("-------");
        //普通for循环
        for(int i=0;i< arraylist.size();i++) {
            String s = arraylist.get(i);
            System.out.println(s);
        }
        System.out.println("-------");
        //迭代器的方式
        Iterator<String> it = arraylist.iterator();
        while(it.hasNext()) {
            String s = it.next();
            System.out.println(s);
        }
        System.out.println("-------");


        //2、创建LinkedList集合对象
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("a");
        linkedList.add("b");
        linkedList.add("c");
        //增强for
        for(String s:linkedList) {
            System.out.println(s);
        }
        System.out.println("-------");
        //普通for
        for(int i=0;i< linkedList.size();i++) {
            String s = linkedList.get(i);
            System.out.println(s);
        }
        System.out.println("-------");
        //迭代器
        Iterator<String> it1 = linkedList.iterator();
        while(it1.hasNext()) {
            String s = it1.next();
            System.out.println(s);
        }
    }
}

6.7 LinkedList集合特有方法

方法名说明
public void addFirst(E,e)在该列表开头插入指定的元素
public void addLast(E,e)将指定的元索追加到此列表的末尾
public E getFirst()返回此列表中的第一个元索
public E getLast()返回此列表中的最后一个元素
public E removeFirst从此列表中删除并返回第一个元素
public E removeLast从此列表中删除并返回最后一个元素
package ceshi;

import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
        //创建集合对象
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("java");
        linkedList.add("python");
        linkedList.add("scala");
        System.out.println(linkedList); //[java, python, scala]

        //1、public void addFirst(E,e) 	在该列表开头插入指定的元素
        linkedList.addFirst("1");
        System.out.println(linkedList); //[1, java, python, scala]

        //2、public void addLast(E,e) 	将指定的元索追加到此列表的末尾
        linkedList.addLast("5");
        System.out.println(linkedList); //[1, java, python, scala, 5]

        //3、public E getFirst() 	返回此列表中的第一个元索
        System.out.println(linkedList.getFirst()); //1

        //4、public E getLast() 	返回此列表中的最后一个元素
        System.out.println(linkedList.getLast()); //5

        //5、public E removeFirst 	从此列表中删除并返回第一个元素
        System.out.println(linkedList.removeFirst()); //1
        System.out.println(linkedList);//[java, python, scala, 5]

        //6、public E removeLast 	从此列表中删除并返回最后一个元素
        System.out.println(linkedList.removeLast()); //5
        System.out.println(linkedList); //[java, python, scala]
    }
}

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

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

相关文章

初识数据仓库

一、什么是数据仓库数据库 --> OLTP&#xff1a;&#xff08;on-line transaction processing&#xff09;翻译为联机事务处理记录某类业务事件的发生&#xff0c;如购买行为&#xff0c;银行交易行为&#xff0c;当行为产生后&#xff0c;系统会记录是谁在何时何地做了何事…

day11_python虚拟环境安装与配置

文章目录Windows下安装第一步&#xff0c;安装virtualenv改源参考第二步&#xff0c;安装virtualenvwrapper-winUbuntu下安装第一步、安装virtualenv和virtualenvwrapper第二步、配置.bashrc文件&#xff0c;添加下面三行第三步&#xff0c;用下列命令让修改后的.bashrc生效配置…

今天来聊一聊信息差,或许会刷新你的认知

有人会说&#xff1a;现在互联网信息这么发达&#xff0c;获取信息的渠道也越来越多&#xff0c;还会存在信息差吗&#xff1f;我的回答是&#xff1a;会&#xff0c;而且随着社会高速的发展&#xff0c;信息差会越来越明显。这里大家需要了解一个词&#xff1a;信息茧房信息茧…

植物育种中广义遗传力的定义

大家好&#xff0c; 我是邓飞。 今天聊一下广义遗传力的计算方法。 广义遗传力定义 广义遗传力&#xff08;H2H^2H2&#xff09;定义为归因于基因型总体遗传变异的表型变异比例。 通常他包括三个解释&#xff1a;&#xff08;详见我这篇博客的公式推导 回归系数 相关系数 遗…

微信小程序_调用openAi搭建虚拟伙伴聊天

微信小程序_调用openAi搭建虚拟伙伴聊天背景效果关于账号注册接口实现8行python搞定小程序实现页面结构数据逻辑结速背景 从2022年的年底&#xff0c;网上都是chagpt的传说&#xff0c;个人理解这个chatgpt是模型优化训练&#xff0c;我们在用chatgpt的时候就在优化这个模型&a…

九龙证券|连续13周净流入!北向资金爆买“中字头”股票

Wind数据显现&#xff0c;本周北向资金净流入A股达29.33亿元&#xff0c;其间周四净流入121亿元&#xff0c;其他四个交易日均为净流出状况。尽管本周北向资金流入A股力度放缓&#xff0c;可是仍然保持着周度接连净流入态势。 接连第13周净流入 Wind数据显现&#xff0c;从202…

Redis核心知识点

Redis核心知识点Redis核心知识点大全五种数据类型redis整合SpringBoot序列化问题渐进式扫描慢查询缓存相关问题数据库和缓存谁先更新缓存穿透缓存雪崩缓存击穿实际应用超卖问题分布式锁全局唯一ID充当消息队列Feed流附近商户签到HyperLogLog实现UV统计持久化RDBAOF持久化小结事…

整型提升+算术转换——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容是之前操作符那篇博客中没有讲完的内容&#xff0c;整型提升这个小知识点也非常重要&#xff0c;那现在&#xff0c;就让我们进入操作符的世界吧 隐式类型转换 算术转换 操作符的属性 隐式类型转换 表达式求值的顺序一部…

opencv显示图像

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

带头节点的单链表的就地逆置

目录 1.题目背景 2.思路方法分析 2.1采用循环实现的就地逆置法 2.2 递归方式实现的逆置 3.金句省身 1.题目背景 本题要求编写函数实现带头结点的单链线性表的就地逆置操作函数。L是一个带头结点的单链表&#xff0c;函数ListReverse_L(LinkList &L)要求在不新开辟节点的…

使用自己的数据集,测试mmrotate新网络rotated_rtmdet,旋转目标检测

1.安装 &#xff01;&#xff01;&#xff01;&#xff01;一定不要安装mmrotate 1.版本需求 mmcv 2.0.0rc2 mmdet 3.0.0rc5 mmengine 0.5.0 不用安装mmcv-full 下载mmrotate 1.x 源码 &#xff08;不要下载默认的master&#xff0c;因为新的网络只在1.x版本中&#xff09; …

【前端】Vue项目:旅游App-(23)detail:房东介绍、热门评论、预定须知组件

文章目录目标过程与代码房东介绍landlord热门评论HotComment预定须知Book效果总代码修改或添加的文件detail.vuedetail-book.vuedetail-hotComment.vuedetail-landlord.vue参考本项目博客总结&#xff1a;【前端】Vue项目&#xff1a;旅游App-博客总结 目标 根据detail页面获…

我用python/C++调用ChatGPT自制了一个聊天问答机器人

目录1 ChatGPT完整版2 Python/C调用ChatGPT2.1 获取API秘钥2.2 测试API功能2.3 设计简单UI3 聊天问答1 ChatGPT完整版 2015年&#xff0c;OpenAI由马斯克、美国创业孵化器Y Combinator总裁阿尔特曼、全球在线支付平台PayPal联合创始人彼得蒂尔等硅谷科技大亨创立&#xff0c;公…

【脚本开发】运维人员必备技能图谱

脚本&#xff08;Script&#xff09;语言是一种动态的、解释性的语言&#xff0c;依据一定的格式编写的可执行文件&#xff0c;又称作宏或批处理文件。脚本语言具有小巧便捷、快速开发的特点&#xff1b;常见的脚本语言有Windows批处理脚本bat、Linux脚本语言shell以及python、…

Spring缓存Demo

Spring中的缓存用法:有说错请指正 启动类加EnableCache 注解很多,这里举例几个实用的 第一组 value和key都没什么特别的含义,随你自己取,注意key里面是包了一层的 Cacheable(value"user",key "findUsers") 第一次查询的时候,会查数据库,然后将返回结果…

【GlobalMapper精品教程】045:空间分析工具(2)——相交

GlobalMapper提供的空间分析(操作)的方法有:交集、并集、单并集、差异、对称差集、相交、重叠、接触、包含、等于、内部、分离等,本文主要讲述相交工具的使用。 文章目录 一、实验数据二、符号化设置三、相交运算四、结果展示五、心灵感悟一、实验数据 加载配套实验数据(…

Hadoop安装 --- 简易安装Hadoop

目录 1、使用xftp工具 在opt目录下创建install和soft文件 2、使用xftp工具 将压缩包上传到install文件 3、编写shell脚本 3.1、创建目录来放shell脚本 3.2、创建autoinsatll.sh文件并修改权限 3.3、编写autoinsatll.sh 文件 刷新资源 运行文件 格式化 启动所有进程 Ha…

ChatGPT到底有多牛?博主带你亲测

文章目录论文项目代码算法学习情感职业回答知乎ChatGpt网页版与客户端版个人评价论文 问他毕设框架&#xff1a; 让他帮我写一段毕设背景部分&#xff1a; 项目代码 我让他帮我用Django写一个demo网站&#xff1a; 算法 matlab写遗传算法&#xff1a; 问一个数据结构&…

Java是如何创建线程的(二)从glibc到kernel thread

Java是如何创建线程的&#xff08;二&#xff09;从glibc到kernel thread 背景 上一节我们讨论了java线程是如何创建的&#xff0c;看了看从java代码层面到jvm层面的源码里都干了什么。 整个流程还是比较复杂的&#xff0c;我将上一节总结的调用时序图贴在下面&#xff0c;方…

Flutter Widget - Container 容器

Container 属性 child 容器包含的子组件color 容器背景色padding 内边距margin 外边距decoration 定义容器形状、颜色alignment 子组件在容器内的对齐方式constraints 定义宽高width 宽(可选)height 高(可选)transform 变换transformAlignment 变换原点的相对位置foregroundDe…