java.util.ArrayList类 是 java.util.List 的一个实现类,是一个基于数组实现的有序容器类(容许存储 null)。java
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); System.out.println(arrayList); } } /~~out:[tom, jack, mary]
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // 在索引为 0 的位置插入 mike arrayList.add(0, "mike"); System.out.println(arrayList); } } ~~out:[mike, tom, jack, mary]
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); List<String> arrayList2 = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); arrayList2.add("mike"); arrayList2.add("jeery"); // 将arrayList2 的元素所有添加到 arrayList中 并从 arrayList 的末尾开始添加 arrayList.addAll(arrayList2); System.out.println(arrayList); } } ~~out:[tom, jack, mary, mike, jeery]
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // 清除 arrayList 中的全部元素 arrayList.clear(); System.out.println(arrayList); } } ~~out:[]
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // listCopy 是 arrayList 的一份拷贝 listCopy 指向的集合对象和 arrayList 指向的集合对象不是同一个 ArrayList<String> listCopy = (ArrayList<String>)arrayList.clone(); listCopy.remove(0); System.out.println(arrayList); System.out.println(listCopy); } } ~~out:[tom, jack, mary] ~~out:[jack, mary]
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); System.out.println(arrayList); // arrayList 中包含 tom 因此返回 true System.out.println(arrayList.contains("tom")); } } ~~out:[tom, jack, mary] ~~out:true
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // 设置 arrayList 容器的容量为5 arrayList.ensureCapacity(5); System.out.println(arrayList); System.out.println(arrayList.size()); } } ~~out:[tom, jack, mary] ~~out:3
注:这里也许会奇怪,若是 ensureCapacity() 方法是设置容器的容量,那为何 arrayList.size() 的值为 3呢?这里有一个误区,容器的容量指的是容器内部 Object[] 数组的容量,而 size() 方法获得的是存储于容器中实际对象的个数,上面的示例中, arrayList 存储了3个 字符串对象,所以 size() 返回的是 3数组
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // forEach 能够用来遍历当前集合 arrayList.forEach(new Consumer<String>() { @Override public void accept(String t) { System.out.println(t); } }); // 上述循环集合也能够写成 arrayList.forEach(e -> System.out.println(e)); } } ~~out:tom ~~out:jack ~~out:mary
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // 获取集合中 索引为 0 的元素 System.out.println(arrayList.get(0)); } } ~~out:tom
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("tom"); arrayList.add("mary"); // 当前 arrayList 添加了两个 tom , indexOf 返回 tom 第一次出现的索引值 0 System.out.println(arrayList.indexOf("tom")); } } ~~out:0
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // isEmpty() 方法判断当前集合是否为空 当前 arrayList 不为空,返回 falsse,若为空 返回 true System.out.println(arrayList.isEmpty()); } } ~~out:false
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // iterator() 方法返回一个 Iterator 对象,能够用此 Iterator 对象来便利当前集合 Iterator<String> iterator = arrayList.iterator(); while(iterator.hasNext()) { System.out.println(iterator.next()); } } } ~~out:tom ~~out:jack ~~out:mary
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("tom"); arrayList.add("mary"); // lastIndexOf 方法返回 tom 在集合中最后一次出现的索引值 2 System.out.println(arrayList.lastIndexOf("tom")); } } ~~out:2
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // listIterator 方法返回一个 ListIterator 对象 ListIterator<String> listIterator = arrayList.listIterator(); // 将游标定位到 arrayList 集合末尾 for(;listIterator.hasNext();) { listIterator.next(); } // 逆序遍历 arrayList 集合 for(;listIterator.hasPrevious();) { System.out.println(listIterator.previous()); } } } ~~out:mary ~~out:jack ~~out:tom
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); arrayList.add("jerry"); // listIterator(1) 返回从索引值 1 开始(包含1)到集合的终点为止的 ListIterator 对象 (正序) ListIterator<String> listIterator = arrayList.listIterator(1); // 当前 ListIterator 对象 只包含 arrayList集合中 索引值 1~3 的元素 for(;listIterator.hasNext();) { System.out.println(listIterator.next()); } } } ~~out:jack ~~out:mary ~~out:jerry
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // remove 方法移除指定索引位置 0 的元素 arrayList.remove(0); System.out.println(arrayList); } } ~~out:[jack, mary]
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); ArrayList<String> arrayList2 = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); arrayList.add("jerry"); arrayList2.add("tom"); arrayList2.add("jack"); // 在 arrayList 中 移除 arrayList2 中的全部元素 arrayList.removeAll(arrayList2); System.out.println(arrayList); } } ~~out:[mary, jerry]
public class ArrayListDemo { public static void main(String [] args) { ArrayList<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); arrayList.add("jerry"); // removeIf 方法 指定一个 Predicate 接口 根据接口的具体实现来移除 arrayList 中的元素 此处指定移除 字符串的长度大于 4 的元素,所以 jerry 被移除了 arrayList.removeIf(new Predicate<String>(){ @Override public boolean test(String t) { return t.length() > 4; } }); // 这是 java8 的写法 arrayList.removeIf(e -> e.length() > 4); System.out.println(arrayList); } } ~~out:[tom, jack, mary]
// 该方法用 portected 修饰符修饰 外部没法访问
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); arrayList.add("jerry"); // replaceAll 方法 提供一个 UnaryOpertor 接口,用接口实现返回的结果来替换 arrayList 中的元素,arrayList 中的元素都被替换成了 mike arrayList.replaceAll(new UnaryOperator<String>() { String other = "mike"; public String apply(String t) { return other; } }); System.out.println(arrayList); } } ~~out:[mike, mike, mike, mike]
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); List<String> arrayList2 = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); arrayList2.add("tom"); arrayList2.add("jack"); // retainAll 方法会移除 arrayList 中 不包含 arrayList2 中元素的部分元素,arrayList2 中不包含 mary ,所以 arrayList 中的marry 被移除了 arrayList.retainAll(arrayList2); System.out.println(arrayList); } } ~~out:[tom, jack]
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // set 方法将 arrayList 中索引值为 0 的元素替换为 mike arrayList.set(0,"mike"); System.out.println(arrayList); } } ~~out:[mike, jack, mary]
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("jack"); arrayList.add("mary"); // size 方法返回当前 arrayList 中存在元素的容量 System.out.println(arrayList.size()); } } ~~out:3
public static void main(String [] args) { Student student = new Student("tom",10); Student student1 = new Student("jack",20); Student student2 = new Student("mary",30); Student student3 = new Student("jerry",40); List<Student> arrayList = new ArrayList<>(); arrayList.add(student); arrayList.add(student1); arrayList.add(student2); arrayList.add(student3); // sort 提供一个排序的接口 根据接口的实现来排序 arrayList 中的元素 arrayList.sort(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o2.getAge() - o1.getAge(); } }); System.out.println(arrayList); } ~~out:[Student [name=jerry, age=40], Student [name=mary, age=30], Student [name=jack, age=20], Student [name=tom, age=10]]
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("mary"); arrayList.add("jerry"); // spliterator() 方法返回一个 Spliterator 对象 Spliterator<String> spliterator = arrayList.spliterator(); } }
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("mary"); arrayList.add("jerry"); arrayList.add("mike"); // subList() 方法从 arrayList 中截取指定开始位置到结束位置的元素(包前不包后),返回一个新的集合 arrayList2 List<String> arrayList2 = arrayList.subList(0, 2); System.out.println(arrayList2); } } ~~out:[tom, mary]
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("mary"); arrayList.add("jerry"); arrayList.add("mike"); // toArray() 方法将 arrayList 转换为 Objcet[] 数组 Object [] object = arrayList.toArray(); for(Object obj:object) { System.out.println(obj); } } } ~~out:tom ~~out:mary ~~out:jerry ~~out:mike
public class ArrayListDemo { public static void main(String [] args) { List<String> arrayList = new ArrayList<>(); arrayList.add("tom"); arrayList.add("mary"); arrayList.add("jerry"); arrayList.add("mike"); // toArray(T[] a) 方法将 arrayList 转换为 String 类型的数组,接收的也是一个 String 类型的数组 String[] string = arrayList.toArray(new String[4]); for(String obj:string) { System.out.println(obj); } } } ~~out:tom ~~out:mary ~~out:jerry ~~out:mike
public class ArrayListDemo { public static void main(String [] args) { // 要调用 trimToSize 方法 要显式设置 arrayList 的容量 ArrayList<String> arrayList = new ArrayList<>(10); arrayList.add("tom"); arrayList.add("mary"); arrayList.add("jerry"); arrayList.add("mike"); // trimToSize 方法将 arrayList 的容量设为当前存储元素的容量,当前 arrayList 申请的容量为 10 ,但存储只用了 4 ,trimToSize 就将当前容量设置成了 4 arrayList.trimToSize(); } }