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集合底层就是数组。

java 复制代码
 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的方式遍历

java 复制代码
 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集合

java 复制代码
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底层也是数组,是线程安全的

java 复制代码
  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()时,都会返回序列中的下一个元素,并将内部指针向前移动。
    }
相关推荐
Chrikk24 分钟前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*27 分钟前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue27 分钟前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man29 分钟前
【go从零单排】go语言中的指针
开发语言·后端·golang
测开小菜鸟31 分钟前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity1 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天2 小时前
java的threadlocal为何内存泄漏
java
caridle2 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
萧鼎2 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸2 小时前
【一些关于Python的信息和帮助】
开发语言·python