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

Java之ArrayList

1.ArrayList的简介

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:
在这里插入图片描述

  1. ArrayList是以泛型方式实现的,使用时必须要先实例化
  2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问
  3. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的
  4. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的
  5. 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList
  6. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表

2.ArrayList使用

2.1ArrayList的构造

在这里插入图片描述
我们发现在对ArrayList实例化时,有三种实例化方法,即ArrayList底部有三种构造方法

2.1.1 ArrayList() 无参构造

public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }
    
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

2.1.2 ArrayList(Collection<? extends E> c) 利用其他 Collection 构建 ArrayList

   public ArrayList(Collection<? extends E> c) {
        Object[] a = c.toArray();
        if ((size = a.length) != 0) {
            if (c.getClass() == ArrayList.class) {
                elementData = a;
            } else {
                elementData = Arrays.copyOf(a, size, Object[].class);
            }
        } else {
            // replace with empty array.
            elementData = EMPTY_ELEMENTDATA;
        }
    }

2.1.3ArrayList(int initialCapacity)|指定顺序表初始容量

public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        }
    }


private static final Object[] EMPTY_ELEMENTDATA = {};

2.2ArrayList常见操作

方法解释
boolean add(E e)尾插 e
void add(int index, E element)将 e 插入到 index 位置
boolean addAll(Collection<? extends E> c)尾插 c 中的元素
E remove(int index)删除 index 位置元素
boolean remove(Object o)删除遇到的第一个 o
E get(int index)获取下标 index 位置元素
E set(int index, E element)将下标 index 位置元素设置为 element
void clear()清空
boolean contains(Object o)判断 o 是否在线性表中
int indexOf(Object o)返回第一个 o 所在下标
int lastIndexOf(Object o)返回最后一个 o 的下标
List < E > subList(int fromIndex, int toIndex)截取部分 list

2.2.1boolean addAll(Collection<? extends E> c) 尾插 c 中的元素

public static void main(String[] args) {
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        List<Integer> list1=new ArrayList<>();
        list1.add(5);
        list.addAll(list1);
        System.out.println(list);
    }

在这里插入图片描述
在这里插入图片描述

2.2.2 boolean remove(Object o) 删除遇到的第一个 o

    public static void main(String[] args) {
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(4);
        list.add(4);
        list.remove(4);//只能删除4这个元素,并不能指定删除第几个元素
        list.remove(new Integer(4));//使用该方法可以指定删除4这个元素,但该方法已过时
        System.out.println(list);
    }

在这里插入图片描述

在这里插入图片描述

2.2.3 List < E > subList(int fromIndex, int toIndex) 截取部分 list

public static void main(String[] args) {
        List<Integer> list=new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        System.out.println(list);
        List<Integer> list1=list.subList(1,3);
        System.out.println(list1);
        list1.remove(1);
        System.out.println(list1);
        System.out.println(list);
    }

在这里插入图片描述
在这里插入图片描述

总结sublist 截取字符串后不会产生新的对象,而是记录截取部分的地址,并获得权限对地址范围内的字符串修改

2.3ArrayList的遍历

ArrayList 可以使用三方方式遍历:for循环+下标、foreach、使用迭代器

public static void main(String[] args) {
        ArrayList<Integer> list=new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        //1.使用下标+for循环遍历
            for (int i = 0; i < list.size() ; i++) {
            System.out.print(list.get(i)+" ");
        }
        System.out.println();
        
         //2.使用foreach循环遍历
        for (Integer integer:list) {
            System.out.print(integer+" ");
        }
        System.out.println();
        //3.使用迭代器遍历
        System.out.println("======迭代器遍历1========");
        Iterator<Integer> it =list.listIterator();{
            while(it.hasNext()){
                System.out.print(it.next());
            }
        }
        System.out.println();
        
        System.out.println("======迭代器遍历2========");
        ListIterator<Integer> lit=list.listIterator();
        while (lit.hasNext()){
            System.out.print(lit.next());
        }
        System.out.println();
         
        System.out.println("======迭代器遍历3========");
        ListIterator <Integer> listPrev= list.listIterator(list.size());//从index位置逆序打印
        while(listPrev.hasPrevious()){
            System.out.print(listPrev.previous());
        }
}

在这里插入图片描述
在这里插入图片描述

2.4ArrayList的扩容机制

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


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

相关文章:

  • Could not initialize class sun.awt.X11FontManager
  • 2024/11/13 英语每日一段
  • 前端-同源与跨域
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何查看PDS系统的自阻抗操作指导
  • 【含开题报告+文档+PPT+源码】基于Spring Boot智能综合交通出行管理平台的设计与实现
  • ubuntu cmake CPack将第三方库进行打包
  • 【组件】WEB前端-富文本编辑器组件推荐 在线编辑器 Word
  • 了解线程池
  • 【文献阅读】Unsupervised Machine Learning for Bot Detection on Twitter
  • pytorch qwen2-vl自定义数据全量微调
  • SpringBoot万级并发-jemeter-Address already in use: connect
  • 三、Kubernetes中的控制器的使用
  • AI服务器,深度学习英特尔服务器主板和超微服务器主板哪个牌子好?
  • Rust 函数
  • 人工智能物联网的去中心化和分布式学习:全面综述、新兴挑战和机遇
  • 基于鸿蒙API10的RTSP播放器(七:亮度调节功能测试)
  • 太速科技-基于XC7Z100+AD9361的双收双发无线电射频板卡
  • 【2024】前端学习笔记6-容器标签div
  • QT实现TCP/UDP通信
  • 基于python+django+vue的农产品销售管理系统
  • django-admin自定义功能按钮样式
  • medium_socnet
  • 数据库与表的操作
  • 2024秋季云曦开学考
  • 商业预测 初识R
  • 数据结构基础详解:哈希表【理论计算篇】开放地址法_线性探测法_拉链法详解