ArrayList 详解
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
ArrayList 底层是基于数组来实现容量大小动态变化的。
/**
* The size of the ArrayList (the number of elements it contains).
*/
private int size; // 实际元素个数
transient Object[] elementData;
注意:上面的 size 是指 elementData 中实际有多少个元素,而 elementData.length 为集合容量,表示最多可以容纳多少个元素。
默认初始容量大小为 10;
/**
* Default initial capacity.
*/
private static final int DEFAULT_CAPACITY = 10;
构造函数
无参构造函数
/**
* Constructs an empty list with an initial capacity of ten.
*/
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
注意:注释是说如果我们要构造一个容量大小为 10 的空的 list 集合,我们使用构造函数只是给 elementData 赋值了一个空的数组,其实真正是在第一次添加元素时容量扩大至 10 的。
add(E e) 方法
将指定的元素追加到此列表的末尾
package a;
//使用add()方法向集合里面添值
public class tianzhi {
public static void main(String[] args) {
List l=new ArrayList();
l.add("a");
l.add(1);
l.add('b');
l.add(2.0f);//Float
l.add(2.00);
Object e = 3,s=6;
l.add(e);
l.add(s);
//“E”为不确定的类型,所以可以输入任意值,如果想向里面添加对象名,则要输入数据类型
}
}
add(int index, E element)方法*
在此列表中的指定位置插入指定的元素。
public class tianzhi {
public static void main(String[] args) {
List l=new ArrayList();
int e=6;
l.add(3,e);//前面写下标,后面写要插入集合的内容
//注意:下标从零开始
}
}
clear()
从列表中删除所有元素。
public static void main(String[] args) {
List l=new ArrayList();
l.add(66);
l.add(5);
for(int i=0;i<l.size();i++) {
System.out.println(l.get(i));
}
l.clear();
for(int i=0;i<l.size();i++) {
System.out.println(l.get(i));
}
}
由结果可知在l.clear(); 后是没有输出结果的,也就是集合里面已经没有了元素
contains(Object o)方法
验证集合里面是否有此元素,如果有则返回true
public static void main(String[] args) {
List l=new ArrayList();
l.add(66);
l.add(5);
for(int i=0;i<l.size();i++) {
System.out.println(l.get(i));
}
System.out.println(l.contains(66));
}//返回true
forEach(Consumer<? super E> action)方法
对 Iterable的每个元素执行给定的操作,直到所有元素都被处理或动作引发异常。
public static void main(String[] args) {
int i = 0;
List<Integer> list = new ArrayList<>();
list.add(++i);
list.add(++i);
list.add(++i);
list.add(++i);
list.forEach(cc -> System.out.println(cc));
list.forEach(System.err :: println);
list.add(++i);
Integer[] ints = new Integer[]{};
ints = list.toArray(ints);
System.out.println(Arrays.asList(ints));
}
get(int index) 方法
获得括号里下标所代表的元素
运用代码
public static void main(String[] args) {
List arrl=new ArrayList();
arrl.add("张三");
arrl.add(10);
arrl.add(3.14);
//返回集合的长度
int le=arrl.size();
//输出值get(index)获取指定下标的值
System.out.println("第一种方法");
for(int i=0;i<le;i++) {
System.out.print(arrl.get(i)+" ");
}
indexOf(Object o)方法
返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
public static void main(String[] args) {
int a=5;
List l=new ArrayList();
((ArrayList) l).ensureCapacity(s);
l.add(66);
l.add(5);
l.add(5);
System.out.println(l.indexOf(5));
for(int i=0;i<l.size();i++) {
System.out.println(l.get(i));
}
}
isEmpty()方法
如果此列表不包含元素,则返回 true 。
验证集合内是否有元素,使用方法是“.isEmpty() ”。
public static void main(String[] args) {
int a=5;
List l=new ArrayList();
((ArrayList) l).ensureCapacity(s);
l.add(66);
l.add(5);
l.add(5);
System.out.println(l.isEmpty());
for(int i=0;i<l.size();i++) {
System.out.println(l.get(i));
}
}
iterator()方法
以正确的顺序返回该列表中的元素的迭代器。
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;
public class RunoobTest {
public static void main(String[] args) {
// 创建集合
ArrayList<String> sites = new ArrayList<String>();
sites.add("a");
sites.add("b");
sites.add("c");
sites.add("d");
// 获取迭代器
Iterator<String> it = sites.iterator();
// 输出集合中的第一个元素
System.out.println(it.next());
}
}
listIterator() 方法
返回列表中的列表迭代器(按适当的顺序)。
import typeinfo.pets.*;
import java.util.*;
public class ListIteration {
public static void main(String[] args) {
List<Pet> pets = Pets.arrayList(8);
ListIterator<Pet> it = pets.listIterator();
while(it.hasNext())
System.out.print(it.next() + ", " + it.nextIndex() +
", " + it.previousIndex() + "; ");
System.out.println();
// Backwards:
while(it.hasPrevious())
System.out.print(it.previous().id() + " ");
System.out.println();
System.out.println(pets);
it = pets.listIterator(3);
while(it.hasNext()) {
it.next();
it.set(Pets.randomPet());
}
System.out.println(pets);
}
}
remove(int index)方法
删除指定位置的元素
public static void main(String[] args) {
int s=5;
List l=new ArrayList();
((ArrayList) l).ensureCapacity(s);
l.add(66);
l.add(5);
l.add(5);
l.remove(0);
for(int i=0;i<l.size();i++) {
System.out.println(l.get(i));
}
}
removeIf(Predicate<? super E> filter)
删除满足给定谓词的此集合的所有元素。
public static void main(String[] args){
List<String>list = new ArrayList<String>();
list.add("a"); //向列表中添加数据
list.add("b"); //向列表中添加数据
list.add("c"); //向列表中添加数据
List<String>list1 = new ArrayList<String>();
list1.add("a"); //向列表中添加数据
list1.add("b"); //向列表中添加数据
boolean ret = list.removeAll(list1); //从list中移除与list1相同的元素
Iterator<String>it = list.iterator(); //创建迭代器
while(it.hasNext()){ //循环遍历迭代器
System.out.println(it.next()); //输出集合中元素
}
}
removeRange(int fromIndex, int toIndex) 方法
从这个列表中删除所有索引在 fromIndex (含)和 toIndex之间的元素。
import java.util.*;
public class a extends ArrayList{
public static void main(String[] args) {
a arrlist = new a();
arrlist.add(10);
arrlist.add(12);
arrlist.add(31);
System.out.println("原list:" + arrlist);
arrlist.removeRange(0,2);
System.out.println("新list:" + arrlist);
}
}