当前位置: 首页 > article >正文

Java 集合之List

一、集合常用API

1.添加相关的方法

add(E e)  确保此collection包含指定的元素(可选操作)

addAll(Collection<? extends E>  c)  将指定集合中的元素都添加到此集合中(可选操作)

2.删除相关的方法

clear()   移除这个集合中所有的元素(可选操作)

remove(Object o)  从此集合中移除指定元素的单个存在实例(可选操作)

removeAll(Collection<?> c)  移除此集合中那些也包含在指定集合中的所有元素(可选操作)

3.判断相关的方法

contains(Object o)  如果此collection包含指定的元素,则返回true。

containsAll(Collection<?>  c)  如果此集合包含指定集合中的所有元素,则返回true。

isEmpty()  如果此集合不包含元素,则返回true。

4.数组的转换相关方法

toArray()  返回此集合中所有元素的数组

二、List集合

List简介

List是有序的集合,就像数组一样。而List可以理解为是一个长度可变的数组,而且提供了丰富的API。List集合底层就是数组。

 public static void main(String[] args) {
        //创建一个List的集合
        List list = new ArrayList();
        //向末尾添加元素
        list.add("张三");//0
        list.add("李四");//1
        list.add("王五");//2
        System.out.println(list);

        //我们在1处的索引位置来插入元素,我们插入一个元素,该索引后面的元素都会向后一位
        list.add(1,"晁盖");
        System.out.println(list);

        //创建一个集合
        List list1 = new ArrayList();
        list1.add("一");
        list1.add("二");
        list1.add("三");
        list.addAll(list1);
        System.out.println(list);
    }

List迭代器Listlterator

jdk1.8文档下的方法

Iterator<E> iterator()   返回在此collection 的元素上进行迭代的迭代器。

通过ListIterator的方式遍历

 public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add("张三");//0
        list.add("李四");//1
        list.add("赵六");//2
        list.add("王五");//3
        list.add("赵六");//4
        ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()){
            //获得迭代的元素
            String str = (String) listIterator.next();
            if ("赵六".equals(str)){
                //不能在一边遍历的时候一边操作集合,这样会有多线程的并发问题
                //list.add("任七")这个是不行的
                //迭代器可以给我们提供了一个add方法让我们避免并发问题,但是添加的时候本次遍历不生效
                listIterator.add("任七");
            }
            System.out.println(str);
        }
        System.out.println(list);
    }

使用for循环来动态的遍历List集合

public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add("张三");//0
        list.add("李四");//1
        list.add("赵六");//2
        list.add("王五");//3
        list.add("赵六");//4
        for (int i=0;i<list.size();i++){
            //根据索引来获得对应的元素
            String str = (String) list.get(i);
            if ("赵六".equals(str)){
                list.add("任七"); //加在末尾
            }
            System.out.println(str);
        }
        System.out.println(list);
    }

List中元素是可以重复的

三、List实现类

ArrayList

特点
  • ArrayaList的底层是数组的原理
  • ArrayList中的元素可以重复
  • ArrayList是有序的集合,长度不固定
  • ArrayList不是线程安全的集合,适合不要求线程安全的需求来实现
  • 效率高,性能高
  • 如果线程要是同步的话,性能就会贬低

长度变化:

  1. 初始容量:当你创建一个 ArrayList 时,如果没有指定初始容量,它通常有一个默认的容量大小(在 Java 8 中,默认为 10)。如果你知道将要存储的元素数量,可以在创建时指定一个初始容量。

  2. 添加元素:当你向 ArrayList 添加元素时,如果添加后元素数量超过了当前容量,ArrayList 会自动进行扩容。扩容过程通常包括以下步骤:

    • 计算新的容量:通常是当前容量的1.5倍,加上1(以保持整数)。
    • 创建一个新的数组,其大小等于新计算出的容量。
    • 将旧数组中的所有元素复制到新数组中。
    • 将新数组赋值给 ArrayList 的内部数组引用。

LinkedList 

特点

1.LinkedList也不是线程安全的

2.底层结构是链表实现

3.有序集合,更适合做增删改的业务场景

链表:存储了元素和前后的地址

LinkedList是链表为原理,添加修改删除的效率高

Vector

Vector底层也是数组,是线程安全的

  public static void main(String[] args) {
        Vector v = new Vector();
        v.add("张三");
        v.add("李四");
        v.add("王五");

        Object o = v.get(1);
        System.out.println(o);
        System.out.println("------------------------------------");

        for (int i = 0;i<v.size();i++){
            Object o1 = v.get(i);
            System.out.println(o1);
        }
        System.out.println("------------------------------------");

        Enumeration elements = v.elements();
        while (elements.hasMoreElements()){
            Object o1 = elements.nextElement();
            System.out.println(o1);
        }
        //while (elements.hasMoreElements()) 这是一个while循环,它会一直执行,直到elements中没有更多的元素。hasMoreElements()方法是Enumeration接口的一部分,用于检查是否还有更多的元素可以遍历。
        //Object o1 = elements.nextElement(); 这行代码调用nextElement()方法,它会返回Enumeration中的下一个元素。每次调用nextElement()时,都会返回序列中的下一个元素,并将内部指针向前移动。
    }


http://www.kler.cn/a/282418.html

相关文章:

  • Web导出Excel表格
  • 【日常记录-Git】git log
  • Neo4j Desktop 和 Neo4j Community Edition 区别
  • 【Python · PyTorch】卷积神经网络(基础概念)
  • 2024山西省网络建设运维第十八届职业院校技能大赛解析答案(5. nginx 和 tomcat 服务)
  • onlyoffice Command service(命令服务)使用示例
  • C++ STL adjacent_find 用法与实现
  • VMware16安装包+详细安装教程
  • 虚拟机Ubuntu误操作导致无法自动联网的解决办法
  • (第三十七天)
  • Unity(2022.3.41LTS) - 着色器
  • 【自由能系列(初级)】大脑功能与贝叶斯计算——深层生成模型的自由能原理
  • junit格式报告解析工具
  • shell脚本-采集容器内自定义端口tcp连接数并通过http接口推送到Prometheus
  • Ruby 多线程
  • UTONMOS:探索未来游戏的元宇宙纪元新篇章
  • 微知-nandflash和norflash名字为什么叫nand和nor?主要区别是什么?
  • js | XMLHttpRequest
  • 【QT | 开发环境搭建】Linux系统(Ubuntu 18.04) 安装 QT 5.12.12 开发环境
  • MyBatis 源码解析:Environment 与 DataSource 配置实现
  • 【网络安全】服务基础第一阶段——第五节:Windows系统管理基础---- DHCP部署与安全
  • 您应该让 ChatGPT 控制您的浏览器吗?
  • VTK+Qt+Cmake+VS的环境搭建
  • 数据赋能(188)——开发:数据产品——影响因素、直接作用、主要特征
  • 黑马程序员Python机器学习|1机器学习概述
  • oracle日常训练