首页 > 编程语言 >【重识Java】一文弄懂ArrayList所有常见操作

【重识Java】一文弄懂ArrayList所有常见操作

时间:2022-10-08 14:38:02浏览次数:80  
标签:重识 Java ArrayList 元素 sites 列表 add 数组


ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口。

一、基础部分

1.特点

最大的特点:长度可变。
在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。

2.使用方法

(1)初始化

ArrayList objectName =new ArrayList<>();  // 初始化

  • E: 泛型数据类型,用于设置 objectName 的数据类型,只能为引用数据类型
  • objectName: 对象名。

以下是 基本数据类型 对应的 引用数据类型,但并不只有这些引用数据类型。

【重识Java】一文弄懂ArrayList所有常见操作_算法

除了以上这些引用数据类型之外,我们自定义的类也属于引用数据类型。如下:
ArrayList objectName =new ArrayList();  // 初始化

  • 其中Phone是我们自定义的手机类

(2)常用方法

  1. 添加元素

【重识Java】一文弄懂ArrayList所有常见操作_数组_02


bb06-86182c847d7&title=&width=500.8)

  1. 删除元素

【重识Java】一文弄懂ArrayList所有常见操作_数据结构_03



注意此处的removeAll(),其删除的是两集合的交集部分,有时很可能会用到。

  1. 修改元素

【重识Java】一文弄懂ArrayList所有常见操作_算法_04

  1. 查找元素

【重识Java】一文弄懂ArrayList所有常见操作_字符串_05


(判空)

【重识Java】一文弄懂ArrayList所有常见操作_数据结构_06


(找指定值的索引)

【重识Java】一文弄懂ArrayList所有常见操作_字符串_07


(获取指定索引处的值)

  1. 遍历列表

有三种遍历方式,下面的是第三种(不常见),可见具体实例


【重识Java】一文弄懂ArrayList所有常见操作_算法_08

  1. 排序
  2. 【重识Java】一文弄懂ArrayList所有常见操作_字符串_09

具体实例:

import java.util.ArrayList;

public class Test3 {
public static void main(String[] args) {
Test3 test3 = new Test3();

ArrayList<String> sites = new ArrayList<String>();
ArrayList<String> test = new ArrayList<String>();
// 添加元素
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Weibo");
sites.add("Weibo");
sites.add(1,"windx"); //将"windx"添加到目标索引1处,该索引及之后元素均后移

test.add("Google");
test.add("Bill");

//删除元素
sites.remove("Weibo"); //删除给定值(若有多个相同值,则删除索引最小的那个)
sites.remove(1); //删除对应索引位置的值
//删除一组元素
sites.removeAll(test); //在sites中删除sites与test的交集部分
//删除所有元素
test.clear(); //clear方法会将列表清空

//添加一组元素
sites.addAll(test); //默认添加到最后
sites.addAll(1,test); //也可以从指定索引处开始添加

//修改元素
sites.set(1,"xlk"); //将指定索引处元素修改为指定元素

//查找元素
if(sites.contains("xlk")){ //看列表中是否含有xlk
System.out.println(sites.indexOf("xlk")); //找到xlk对应的索引值,若有多个则返回最早出现的,没有则返回-1
System.out.println(sites.lastIndexOf("xlk")); //同上,但是返回最晚出现的,没有同样返回-1
}

//遍历列表
//方法一:for遍历
for (int i = 0; i < sites.size(); i++) {
System.out.println(sites.get(i));
}
//遍历列表(for-each遍历)
for (String i : sites) {
System.out.println(i);
}
//遍历列表(foreach()结合lambda表达式方法遍历)
sites.forEach((e) -> {
System.out.println(e);
});


}
}

更多方法的具体使用详见 ​​菜鸟教程-ArrayList​

(3)与数组、字符串之间的转换

  • 列表 ——> 数组

基本格式:
arraylist.toArray(T[ ] arr)

参数说明:

  • T [ ] arr(可选参数)- 用于存储 列表转换后的数组元素 的 数组

**注意:**这里 T 指的是数组的类型。
返回值:
如果参数 T[ ] arr 作为参数传入到方法,则返回 T 类型的数组。
如果未传入参数,则返回 Object 类型的数组。

//1.传入参数:

// 创建一个新的 String 类型的数组
// 传入的数组长度要 ≥ ArrayList 长度
String[] arr = new String[sites.size()];
// 将ArrayList对象转换成数组,转换后就是arr数组
sites.toArray(arr);

//2.不传入参数:

// 将 ArrayList 对象转换成数组
// 转换后就是Object类型的数组
Object[] obj = sites.toArray();
//如果要转成其它类型的,可以进行强制转换
String[] arr2 = (String[]) sites.toArray();
  • 列表 ——> 转字符串

列表直接转字符串其实并不是那种元素拼接后得到的字符串,而是把列表完整的变成了字符串

String str = sites.toString();
for (int i = 0; i < str.length(); i++) {
System.out.print(str.charAt(i)+"-");//用 - 分隔转换后的字符串的每一个字符
}

结果:

【重识Java】一文弄懂ArrayList所有常见操作_数组_10



所以,如果想得到 xlkwindxBill 这样的字符串,还需要去掉前后的[ ],以及中间的逗号

  • 数组 ——> 列表

最直接的方式是遍历数组,依次添加,如下所示:

int[] nums = new int[n];
ArrayList<Integer> list = new ArrayList<Integer>();
for (int num : nums) {
list.add(num);
}

其次是使用Collections的方法addAll( )

String[] arr = {"Google","Tencent","ByteDance","Alibaba"};
List<String> arraylist = new ArrayList<String>() ;
Collections.addAll(arraylist, arr);

最后,可通过JDK8的Stream流将3总基本类型数组转为List

如果JDK版本在1.8以上,使用流stream来将下列3种数组快速转为List,分别是int[],long[],double[],不支持short[ ],byte[ ],char[]在JDK1.8中暂不支持

int[] ints = {2, 34, 55, 22, 11};
long[] longs = {1, 2, 3};
double[] doubles = {1, 2, 3};
Arrays.stream(ints).boxed().collect(Collectors.toList());
Arrays.stream(longs).boxed().collect(Collectors.toList());
Arrays.stream(doubles).boxed().collect(Collectors.toList());
  • 字符串 ——> 列表


标签:重识,Java,ArrayList,元素,sites,列表,add,数组
From: https://blog.51cto.com/u_15818359/5737604

相关文章