ArrayList的一些小练习

一、导读

本文着重讲解ArrayList的一些基本操作add,remove,set,indexof....

好文章 记得 收藏+点赞+关注 !!!

二、代码以及运行结果
在这里插入图片描述

  • ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问。
  • ArrayList实现了Cloneable接口,表明ArrayList是可以clone的。
  • ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。
  • ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList
  • ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。

话不多说,直接上代码:

/**
 * ArrayList练习
 *
 * @author JiaMing
 * @since 2021/12/8/0008 下午 14:09
 **/

public class ArrayListTest {
    public static void main(String[] args) {
        //新建一个ArrayList
        //注意:ArrayList是线程不安全的,多线程可以采用vector或者CopyOnWriteArrayList
        ArrayList<Object> list = new ArrayList<>();
        //新建一个固定容量为10的ArrayList
        ArrayList<Integer> list1 = new ArrayList<>(10);
        list1.add(12);
        list1.add(11);

        //使用另一个Arraylist对新的ArrayList进行初始化
        ArrayList<Integer> list2 = new ArrayList<>(list1);
        // list2.add("1");   这样会导致编译失败,List<Integer>已经限定了,list2中只能存储整型元素

        //下面这种写法不推荐 避免省略类型,否则任意类型的元素都可以存放,使用时将是一场灾难
        List<Object> list3 = new ArrayList<>();
        list3.add(1);
        list3.add("11");
        list3.add("world");

        //ArrayList的几种遍历输出方式
        //1.for循环遍历 使用下标
        for (int i = 0; i < list3.size(); i++) {
            System.out.println(list3.get(i));
        }
        System.out.println("----------------------------------");

        //2.增强for循环
        for (Object i : list3) {
            System.out.println(i);
        }
        System.out.println("----------------------------------");

        //3.迭代器(也可以使用listIterator())
        Iterator<Object> iterator = list3.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
        System.out.println("----------------------------------");

        //4.使用stream的foreach (简单粗暴)
        list3.forEach(System.out::println);
        System.out.println("----------------------------------");

在这里插入图片描述

 //arrayList的一些方法
        // E remove(int index) -> 删除 index (下标)位置元素
        list3.remove(2);
        list3.forEach(System.out::println);
        System.out.println("----------------------------------");

        //想删除指定元素可以这样
        Iterator<Object> iterator1 = list3.iterator();
        while (iterator1.hasNext()) {
            Object next = iterator1.next();
            if (next.equals("11")) {
                iterator1.remove();
            }
        }
        list3.forEach(System.out::println);
        System.out.println("----------------------------------");

        //更简单粗暴的方法 使用集合类
        list3.removeIf(next -> next.equals(1));
        list3.forEach(System.out::println);
        System.out.println("----------------------------------");

        //将元素插入到list中的指定位置
        CopyOnWriteArrayList<Integer> list4 = new CopyOnWriteArrayList<>();
        list4.add(1);
        list4.add(3);
        //下标为1 元素为2
        list4.add(1, 2);
        list4.forEach(System.out::println);
        System.out.println("----------------------------------");

        //boolean addAll(Collection<? extends E> c) 尾插 c中的元素
        list4.addAll(list1);
        list4.forEach(System.out::println);
        System.out.println("----------------------------------");

    
    }

在这里插入图片描述

//获取某下标位置的元素get()
        System.out.println(list4.get(2));
        System.out.println("----------------------------------");

        //将指定下标位置的元素设置为指定值set()
        list4.set(2, 100);
        list4.forEach(System.out::println);
        System.out.println("----------------------------------");

        //判断线性表中是否包含某元素 contains()
        boolean b = list4.contains(100);
        System.out.println(b);

        //返回第一个指定元素所在下标位置 indexOf()
        System.out.println("100出现第一次的下标:" + list4.indexOf(100));
        list4.add(100);
        //返回最后一个元素出现的下标位置 lastIndexOf()
        System.out.println("100出现最后一次的下标:" + list4.lastIndexOf(100));
        //判断是否为空
        System.out.println("list4是否为空:" + list4.isEmpty());

        //清空list
        list4.clear();

在这里插入图片描述
代码参考:https://blog.csdn.net/dddddrrrzz/article/details/121691217
三、ArrayList扩容机制
ArrayList在第一次插入元素add()时分配10(默认)个对象空间。假如有20个数据需要添加,那么会在第11个数据的时候(原始数组容量存满时),按照1.5倍增长;之后扩容会按照1.5倍增长(10、15、22…)。
具体可以参考这篇文章ArrayList扩容机制

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值