ArrayList:使用的是数组结构,对于增加删除慢,查找快。
//无参构造方法 创建一个长度为0的数组,要第一次传进去数据的时候才会改为10的长度。每次动态扩容的时候都是扩大为原来的1.5倍。
ArrayList<类型> data = new ArrayList<>();
data.add(100); //add返回的一一定是true。
有三种构造方法,其他两个见API。
一些方法的实现:
//无参构造
ArrayList<String> data = new ArrayList<>();
//有参构造 拥有五个长度的列表,当元素超出长度时,会自动扩容。(我们不需进行操作)
ArrayList<String> dataNew = new ArrayList<>(5);
//添加三个元素,都是添加到列表的尾部,依次有序添加。
data.add("123");
data.add("ming");
data.add("2021");
//在第二个位置添加一个元素(从下标0开始的)
data.add(1,"new");
dataNew.add("21");
dataNew.add("32");
//可以添加重复的元素
dataNew.add("21");
//指定dataNew列表的第三个元素,data列表全部元素加入到指定位置,然后顺序往后。
dataNew.addAll(2,data);
//返回此列表中的元素总数
System.out.println(data.size()); // 4
System.out.println(dataNew.size()); // 7
将列表data的所有元素加入到dataNew(Collection<? extends E> c)列表的尾后。
dataNew.addAll(data);
返回列表的所有元素 clone()方法:
System.out.println(dataNew.clone());
上面一行代码返回的是上面所有加入dataNew列表的所有元素(类型均为String类型)。元素结果如下:[21, 32, 123, new, ming, 2021, 21, 123, new, ming, 2021]。此结果也证明了上面的添加元素的准确。
删除所有元素:data.clear();
查询元素是否在列表中,contains(Object o)方法返回true或false:
ArrayList<String> data = new ArrayList<>();
data.add("123");
data.add("ming");
data.add("2021");
System.out.println(data.contains("123"));
返回true
当不为字符串或者是其他结果时都将是false。
第二种方式,以下标元素进行查找get(int index)方法:
ArrayList<String> data = new ArrayList<>();
data.add("123");
data.add("ming");
data.add("2021");
data.add(1,"new");
System.out.println(data.get(3));//下标索引
结果为:2021
第三种方式,indexOf(Object o)方法,如果列表中存在则返回该元素下标索引,若不存在则返回-1.
//无参构造
ArrayList<String> data = new ArrayList<>();
//添加三个元素,都是添加到列表的尾部,依次有序添加。
data.add("123");
data.add("ming");
data.add("2021");
//在第二个位置添加一个元素,从下标0开始的
data.add(1,"new");
System.out.println(data.indexOf(3));
System.out.println(data.indexOf("new"));
结果:
-1
1
查找一个元素最后出现的索引,如果没有该元素则返回-1:int lastIndexOf(Object o)
判断列表是否为空则可以使用isEmpty()方法,如果列表不为空则返回false,如果为空则返回true:
//无参构造
ArrayList<String> data = new ArrayList<>();
//添加三个元素,都是添加到列表的尾部,依次有序添加。
data.add("123");
data.add("ming");
data.add("2021");
//在第二个位置添加一个元素,从下标0开始的
data.add(1,"new");
System.out.println(data.isEmpty());
删除一个指定的元素使用remove方法:E remove(int index)或boolean remove(Obejct o)可以以下标索引删除元素,也可以元素值删除。两者都可用。
ArrayList<String> data = new ArrayList<>();
//添加三个元素,都是添加到列表的尾部,依次有序添加。
data.add("123");
data.add("ming");
data.add("2021");
//在第二个位置添加一个元素,从下标0开始的
data.add(1,"new");
data.remove("new");
data.remove(1);
System.out.println(data.clone());
结果为:[123, 2021]。
删除一个指定的列表所有元素,使用 boolean removeAll(Collection<?> c):
//有参构造 拥有五个长度的列表,当元素超出长度时,会自动扩容。(我们不需进行操作)
ArrayList<String> dataNew = new ArrayList<>(5);
//无参构造
ArrayList<String> data = new ArrayList<>();
//添加三个元素,都是添加到列表的尾部,依次有序添加。
data.add("123");
data.add("ming");
data.add("2021");
//在第二个位置添加一个元素,从下标0开始的
data.add(1,"new");
dataNew.add("21");
dataNew.add("32");
//可以添加重复的元素
dataNew.add("21");
System.out.println(data.clone());
System.out.println(dataNew.clone());
data.addAll(1,dataNew);
System.out.println(data.clone());
data.removeAll(dataNew);
System.out.println(data.clone());
删除一个列表中指定范围的元素使用void removeRange(int fromIndex, int toIndex)
retainAll(Collection<?> c)保留列表中指定的列表元素,其他元素均被删除:
//有参构造 拥有五个长度的列表,当元素超出长度时,会自动扩容。(我们不需进行操作)
ArrayList<String> dataNew = new ArrayList<>(5);
//无参构造
ArrayList<String> data = new ArrayList<>();
//添加三个元素,都是添加到列表的尾部,依次有序添加。
data.add("123");
data.add("ming");
data.add("2021");
//在第二个位置添加一个元素,从下标0开始的
data.add(1,"new");
dataNew.add("21");
dataNew.add("32");
//可以添加重复的元素
dataNew.add("21");
data.addAll(2,dataNew);
data.retainAll(dataNew);
System.out.println(data.clone());
结果:[21, 32, 21]
按索引更改元素:set(int index,Object o):
//无参构造
ArrayList<String> data = new ArrayList<>();
//添加三个元素,都是添加到列表的尾部,依次有序添加。
data.add("123");
data.add("ming");
data.add("2021");
//在第二个位置添加一个元素,从下标0开始的
data.add(1,"new");
data.set(2,"happy");
System.out.println(data.clone());
int size()返回列表的元素总数:
data.set();
subList(int indexFrom,int indexTo)查看indexFrom(包括)到indexTo(不包括)之间的元素:
ArrayList<String> data = new ArrayList<>();
//添加三个元素,都是添加到列表的尾部,依次有序添加。
data.add("123");
data.add("ming");
data.add("2021");
//在第二个位置添加一个元素,从下标0开始的
data.add(1,"new");
data.set(2,"happy");
System.out.println(data.subList(1,2));
结果:[new]
可以使用trimTosize()调整列表实例的容量为当前的大小,最小化了ArrayList实例的存储。