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()时,都会返回序列中的下一个元素,并将内部指针向前移动。
    }
相关推荐
计算机学姐1 分钟前
基于python+django+vue的影视推荐系统
开发语言·vue.js·后端·python·mysql·django·intellij-idea
小筱在线6 分钟前
SpringCloud微服务实现服务熔断的实践指南
java·spring cloud·微服务
luoluoal11 分钟前
java项目之基于Spring Boot智能无人仓库管理源码(springboot+vue)
java·vue.js·spring boot
ChinaRainbowSea16 分钟前
十三,Spring Boot 中注入 Servlet,Filter,Listener
java·spring boot·spring·servlet·web
Crossoads18 分钟前
【数据结构】排序算法---桶排序
c语言·开发语言·数据结构·算法·排序算法
小游鱼KF19 分钟前
Spring学习前置知识
java·学习·spring
扎克begod23 分钟前
JAVA并发编程系列(9)CyclicBarrier循环屏障原理分析
java·开发语言·python
青灯文案125 分钟前
SpringBoot 项目统一 API 响应结果封装示例
java·spring boot·后端
code bean31 分钟前
【C#基础】函数传参大总结
服务器·开发语言·c#
我就是程序猿35 分钟前
tomcat的配置
java·tomcat