java中集合的List

集合的List

可以存储重复元素

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

一.ArrayList

可以保存重复元素,底层是数组实现,添加元素的类型可以是任意类型的
虽然集合中默认是可以添加任意数据类型,但是后续处理时,会出现类型转换问题
底层是一个数组,默认长度是10,当数组装满时,会自动扩容,(new=old+old/2)
java 复制代码
		ArrayList arrayList=new ArrayList();
        arrayList.add(1);
        arrayList.add("abd");
        arrayList.add(true);
        for (int i=0;i<arrayList.size();i++){
            Object obj=arrayList.get(i);
            if(obj instanceof String){
                String s=(String)obj;//向下转型
                System.out.println(s.length());
            }
        }

        //ArrayList<String> 定义时,为集合中可以存储的数据设定一个类型,必须是类类型
        ArrayList<Integer>arrayList1=new ArrayList<>();
        arrayList1.add(10);//自动装箱
        ArrayList<String>arrayList2=new ArrayList<>();
        arrayList2.add("aa");

        ArrayList<String> arrayList3=new ArrayList<>();
        arrayList3.add("a");
        arrayList3.add("b");
        arrayList3.add("c");
        arrayList3.add("d");
        arrayList3.add("e");
        arrayList3.add("f");
        arrayList3.add("g");
        arrayList3.add("h");
        arrayList3.add("i");
        arrayList3.add("j");
        System.out.println(arrayList3);
        arrayList3.add(1,"H");//在1前加H
        System.out.println(arrayList3);
        arrayList3.remove("j");//把遇到的第一个j去掉
        System.out.println(arrayList3);
        arrayList3.remove(5);//把第5个索引去掉
        System.out.println(arrayList3);
java 复制代码
ArrayList<String> arrayList3=new ArrayList<>();
        arrayList3.add("a");
        arrayList3.add("b");
        arrayList3.add("c");
        arrayList3.add("d");
        arrayList3.add("e");
        arrayList3.add("f");
        arrayList3.add("g");
        arrayList3.add("h");
        arrayList3.add("i");
        arrayList3.add("j");
        System.out.println(arrayList3.remove(0));//删除并返回指定位置上的元素(String类)

        arrayList3.clear();//清空元素
        System.out.println(arrayList3.contains("X"));//是否包含指定的元素

        System.out.println(arrayList3.get(3));//获得指定位置上的元素(底层是数组,获取元素的速度是最快的)

        System.out.println(arrayList3.indexOf("e"));//e的第一次索引
        System.out.println(arrayList3.lastIndexOf("e"));//e的最后一次索引
        System.out.println(arrayList3.isEmpty());//判断是否为空,空true
        arrayList3.set(7,"Y");//替换指定位置元素

        System.out.println(arrayList3.size());//获取集合中元素个数用size,字符串长度用length

        System.out.println(arrayList3);

二.LinkedList

元素比较多的用LInkedList

方法和ArrayList基本一致,只不过方法实现是用链表实现的

三.vector

  • Vector 是同步访问的。
  • Vector 包含了许多传统的方法,这些方法不属于集合框架。

Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。

Vector 类支持 4 种构造方法。

第一种构造方法创建一个默认的向量,默认大小为 10

四.迭代器

Java迭代器(Iterator)是 Java 集合框架中的一种机制,是一种用于遍历集合(如列表、集合和映射等)的接口。

迭代器接口定义了几个方法,最常用的是以下三个:

  • next() - 返回迭代器的下一个元素,并将迭代器的指针移到下一个位置。
  • hasNext() - 用于判断集合中是否还有下一个元素可以访问。
  • remove() - 从集合中删除迭代器最后访问的元素(可选操作)。
java 复制代码
LinkedList<String> l=new LinkedList<>();
        l.add("a");
        l.add("b");
        l.add("c");
        l.add("d");
        l.add("e");
        l.add("f");
        l.add("g");
        l.add("h");
        l.add("i");
        l.add("j");

        for (int i = 0; i < l.size(); i++) {
            System.out.println(l.get(i));
        }
        //增强for遍历
        for(String s:l){
            System.out.println(l);
        }
//使用迭代器遍历
        // 获取迭代器
        Iterator<String> qwq = l.iterator();
        //hasNext():判断是否存在下一个元素
        while(qwq.hasNext()){
            //如果存在,则调用next实现迭代
            System.out.println(l);
        }
相关推荐
_Evan_Yao1 小时前
Redis 缓存穿透、击穿、雪崩,一次讲清!
java·spring·mybatis
梓豪csd1 小时前
消息订阅中心:谁该收到哪条通知
java·开发语言·人工智能·低代码·自动化·1024程序员节
秋饼1 小时前
Spring AI 2.1 Message Parts 深度实战:推理签名回放与跨轮记忆持久化的源码级落地
java·ai·技术分享·后端开发
Sakura_j_h_2 小时前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
thefool1122662 小时前
TCP 1
java·1024程序员节
金銀銅鐵4 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
AI人工智能+电脑小能手5 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
隔窗听雨眠5 小时前
PostgreSQL单表从Windows迁移到Linux:差异剖析、方案对比与全流程实战
linux·windows·postgresql
paopaokaka_luck6 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节
2301_32241428047 小时前
springboot农产品交易平台的设计与实现08055-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·spring boot·redis·mysql·tomcat·maven·mybatis