栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ArrayList的一些小练习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ArrayList的一些小练习

一、导读

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

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

二、代码以及运行结果

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

话不多说,直接上代码:


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

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

        //下面这种写法不推荐 避免省略类型,否则任意类型的元素都可以存放,使用时将是一场灾难
        List 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 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 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 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 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扩容机制

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号