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

124 【Java学习笔记(一百二十四)】之ArrayList用法

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

124 【Java学习笔记(一百二十四)】之ArrayList用法

文章目录
    • 本文章由公号【开发小鸽】发布!欢迎关注!!!
    • 一、ArrayList的初始化
      • (一)直接初始化
      • (二)Arrays.asList
      • (三)Collections.ncopies
    • 二、ArrayList的元素改动
    • 三、ArrayList的遍历
      • (一)for循环
      • (二)增强for循环
      • (三)forEach循环

本文章由公号【开发小鸽】发布!欢迎关注!!!

老规矩–妹妹镇楼:

一、ArrayList的初始化 (一)直接初始化

        这是ArrayList最常用的初始化方式,初始化一个空的List,并通过ArrayList的add()方法不断添加元素,如下所示:

//初始化,不填充
ArrayList integers1 = new ArrayList();
integers1.add(1);

(二)Arrays.asList

        在日常开发中,我们可能会需要初始化一个List,并向其中同时添加多个同类型的值,在这种情况下如果只是通过add()方法添加则会显得非常笨拙,因此尝试采用其他的方式来初始化ArrayList。Arrays.asList是其中的一种方法,可以将数组转换为List集合,可以同时添加多个值,但是这种方法有些坑需要提前说明。

        首先,用该方法得到的List长度是无法改变的,当尝试向该List中添加或删除一个元素时,就会抛出异常(java.lang.UnsupportedOperationException),我们通过asList()方法的实现细节来探究原因,如下是asList()方法的实现代码:

public static  List asList(T... a) {
    return new ArrayList<>(a);
}

        这里的ArrayList不是java.util包下的,而是java.util.Arrays.ArrayList,这是Arrays类中的一个静态内部类,没有实现add()、remove()方法,而是直接使用它的父类AbstractList的相应方法,因此会抛出上述的异常。因此,对于Arrays.asList()方法的使用要十分谨慎,如果只是用来遍历List可以放心使用,但是如果需要修改其中的元素,就不要直接使用。

        那么,如果既想要快速生成一个List,又想要修改List中的元素,应该怎么做呢?ArrayList可以将其他的List中的所有元素一起添加到末尾,因此我们可以使用Arrays.asList()初始化一个多元素的List,然后通过addAll()添加到ArrayList中,如下所示:

//初始化一次填充多个值,asList有很多坑,直接生成List则无法使用add(),remove()等方法
//如下的方式为ArrayList赋值,可使用add()、remove()等方法
ArrayList integers2 = new ArrayList();
List list = Arrays.asList(1, 2, 3);
integers2.addAll(list);

        同时,我们需要注意如果是通过数组来转变为List,则要区分清楚引用类型和基本数据类型的数组,对于引用类型元素的数组,转换后可以直接遍历,而对于基本数据类型的数组,转换后得到的可能就是数组首地址的单元素List,而不是多元素的List,如下所示:

 String[] strings = {"aa", "bb", "cc"};
 List stringList = Arrays.asList(strings);
 System.out.print("1、String类型数组使用asList(),正常:  ");
 for(String str : stringList){
     System.out.print(str + " ");
 }
 System.out.println();
int[] ints = new int[]{1, 2, 3};
List intList = Arrays.asList(ints);
System.out.print("3、基本数据类型的数组使用asList(),出错(输出的是一个引用,把ints当成一个元素了):");
for(Object o : intList){
    System.out.print(o.toString());
}
System.out.println();
    
System.out.print("   " + "这样遍历才能正确输出:");
int[] ints1 = (int[]) intList.get(0);
for(int i : ints1){
    System.out.print(i + " ");
}
System.out.println();

        同时,还需要注意,该方法将数组和List连接起来了,当更新其中一种时,另一个则会自动更新。这一点也需要牢记!!!


(三)Collections.ncopies

        当需要初始化一个多元素List,而这些元素都是相同的值时,可以通过Collections.ncopies()来初始化,用法如下所示,即将element元素复制count次填入ArrayList中。

ArrayList obj = new ArrayList(Collections.nCopies(count,element));
//多次重复填充相同的值
ArrayList integers3 = new ArrayList(Collections.nCopies(2, 5));

二、ArrayList的元素改动

        ArrayList常用的几种方法,包括add添加元素、get获取指定index的元素、remove删除指定index的元素等。

public boolean add(E e): 向集合中添加元素,参数的类型和泛型一致
public E get(int index): 从集合中获取元素,参数书索引编号,返回值是对应位置的元素
public E set(int index, E element):修改指定index索引位置的元素
public E remove(int index): 从集合中删除元素,参数是索引编号,返回值就是被删除的元素
public int size(): 获取集合尺寸的长度,返回值是集合中包含元素的个数。
public boolean contains(Object o):判断集合中是否存在指定的Object

        由于过于简单,具体的例子就不进行展示了。


三、ArrayList的遍历 (一)for循环

        普通的for循环,通过index索引位置来遍历ArrayList:

//1, for循环
for (int i = 0; i < integers1.size(); i++) {
    System.out.println(integers1.get(i));
}

(二)增强for循环

        增强for循环,直接获取ArrayList中的元素,并遍历:

//2. 增强for循环
for (Integer integer : integers1) {
    System.out.println(integer);
}

(三)forEach循环

        通过forEach循环,用法如下所示:

public void forEach(Consumer action) 

        可以看到的是,其中的参数是Consumer,可以可以简洁地处理ArrayList中的每个元素,下面将元素直接输出,如下所示:

//3. forEach
integers1.forEach( s -> {
    System.out.println(s);
});
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024092.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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