ArrayList类常用方法
继承体系结构图

构造方法
| public ArrayList() |
| |
| public ArrayList(int initialCapacity) |
| |
| public ArrayList(Collection<? extends E> c) |
| |
| |
| ArrayList<Integer> arr1 = new ArrayList<>(); |
| |
| ArrayList<Integer> arr2 = new ArrayList<>(20); |
| |
| List<Integer> list = new ArrayList<>(); |
| ArrayList<Integer> arr3 = new ArrayList<>(list); |
扩容:每次扩容为原容量的1.5倍

add()添加一个元素
| |
| public boolean add(E e) { |
| ensureCapacityInternal(size + 1); |
| elementData[size++] = e; |
| return true; |
| } |
| |
| |
| public void add(int index, E element) { |
| |
| rangeCheckForAdd(index); |
| |
| ensureCapacityInternal(size + 1); |
| |
| System.arraycopy(elementData, index, elementData, index + 1, |
| size - index); |
| elementData[index] = element; |
| size++; |
| } |
addAll()添加集合中的全部元素
| public boolean addAll(Collection<? extends E> c) |
| |
| |
| public boolean addAll(int index, Collection<? extends E> c) |
get(int index)返回index位置的元素
| |
| |
| System.out.println(arr1.get(2)); |
| System.out.println(arr1.get(5)); |
clear()清除所有元素
| ArrayList<Integer> arr1 = new ArrayList<>(); |
| |
| arr1.add(1); |
| System.out.println(arr1.toString()); |
| arr1.clear(); |
| System.out.println(arr1.toString()); |
clone()返回数组的克隆对象(浅克隆)
| ArrayList<Integer> arr1 = new ArrayList<>(); |
| |
| arr1.addAll(Arrays.asList(1, 2, 3, 4)); |
| |
| ArrayList<Integer> arrayList = (ArrayList<Integer>) arr1.clone(); |
| |
| System.out.println(arr1); |
| System.out.println(arrayList); |
contains(e) 集合是否包含此元素,包含返回true,否则返回False
| ArrayList<Integer> arr1 = new ArrayList<>(); |
| |
| arr1.addAll(Arrays.asList(1, 2, 3, 4)); |
| |
| System.out.println(arr1.contains(1)); |
ensureCapacity(int minCapacity)改变该集合的容量大小
forEach(Consumer<? super E> action) 对集合中的元素进行遍历,可以对每个元素进行操作
| |
| arr1.forEach(i ->{ |
| System.out.printf("%d、", i * 10); |
| }); |
indexOf(object o)
| |
| public int indexOf(Object o) { |
| if (o == null) { |
| for (int i = 0; i < size; i++) |
| if (elementData[i]==null) |
| return i; |
| } else { |
| for (int i = 0; i < size; i++) |
| if (o.equals(elementData[i])) |
| return i; |
| } |
| return -1; |
| } |
| |
| |
| ArrayList<Person> peoples = new ArrayList<>(); |
| |
| peoples.add(new Person("张三",18)); |
| peoples.add(new Person("李四",19)); |
| peoples.add(new Person("王五",20)); |
| |
| System.out.println(peoples.indexOf(new Person("张三", 18))); |
| |
| |
| System.out.println(peoples.indexOf(new Person("张三", 18))); |
| |
| |
| |
| public class Person { |
| |
| private String name; |
| private Integer age; |
| |
| public Person(){} |
| public Person(String name, Integer age){ |
| this.name=name; |
| this.age = age; |
| } |
| |
| public void say(){ |
| System.out.println("I can talk"); |
| } |
| |
| @Override |
| public boolean equals(Object o) { |
| if (this == o) return true; |
| if (o == null || getClass() != o.getClass()) return false; |
| Person person = (Person) o; |
| return Objects.equals(name, person.name) && Objects.equals(age, person.age); |
| } |
| |
| @Override |
| public int hashCode() { |
| return Objects.hash(name, age); |
| } |
| } |
lastIndexOf(Object o)
| |
| |
| |
| public int lastIndexOf(Object o) { |
| if (o == null) { |
| for (int i = size-1; i >= 0; i--) |
| if (elementData[i]==null) |
| return i; |
| } else { |
| for (int i = size-1; i >= 0; i--) |
| if (o.equals(elementData[i])) |
| return i; |
| } |
| return -1; |
| } |
isEmpty()判断集合是否为空
| |
| public boolean isEmpty() { |
| return size == 0; |
| } |
iterator()获取集合的迭代器
| Iterator<Person> iterator = peoples.iterator(); |
| |
| while (iterator.hasNext()){ |
| Person person = iterator.next(); |
| System.out.println(person.toString()); |
| } |
| |
| |
| |
| |
listIterator()
| |
| public ListIterator<E> listIterator() { |
| return new ListItr(0); |
| } |
| |
| |
| public ListIterator<E> listIterator(int index) { |
| if (index < 0 || index > size) |
| throw new IndexOutOfBoundsException("Index: "+index); |
| return new ListItr(index); |
| } |
| |
| |
| ListIterator<Person> iterator = peoples.listIterator(3); |
| |
| while (iterator.hasPrevious()){ |
| Person person = iterator.previous(); |
| System.out.println(person.toString()); |
| } |
iterator()和listIterator()的区别
| iterator: |
| 不仅可以对list进行迭代,还可以对set进行迭代 |
| 只能单向的迭代,从前往后 |
| listIterator: |
| 只能对list进行迭代。 |
| 可以双向迭代,既可从前往后,也可从后往前进行迭代 |
remove(int index)移除集合指定位置的元素,并返回index位置的元素
| |
| |
| public E remove(int index) { |
| rangeCheck(index); |
| |
| modCount++; |
| E oldValue = elementData(index); |
| |
| int numMoved = size - index - 1; |
| if (numMoved > 0) |
| System.arraycopy(elementData, index+1, elementData, index, |
| numMoved); |
| elementData[--size] = null; |
| |
| return oldValue; |
| } |
| |
| |
| |
| public boolean remove(Object o) { |
| if (o == null) { |
| for (int index = 0; index < size; index++) |
| if (elementData[index] == null) { |
| fastRemove(index); |
| return true; |
| } |
| } else { |
| for (int index = 0; index < size; index++) |
| if (o.equals(elementData[index])) { |
| fastRemove(index); |
| return true; |
| } |
| } |
| return false; |
| } |
removeAll(Collection<?> c)
| |
| public boolean removeAll(Collection<?> c) { |
| Objects.requireNonNull(c); |
| return batchRemove(c, false); |
| } |
| |
| |
| private boolean batchRemove(Collection<?> c, boolean complement) { |
| final Object[] elementData = this.elementData; |
| int r = 0, w = 0; |
| boolean modified = false; |
| try { |
| for (; r < size; r++) |
| if (c.contains(elementData[r]) == complement) |
| elementData[w++] = elementData[r]; |
| } finally { |
| |
| |
| if (r != size) { |
| System.arraycopy(elementData, r, |
| elementData, w, |
| size - r); |
| w += size - r; |
| } |
| if (w != size) { |
| |
| for (int i = w; i < size; i++) |
| elementData[i] = null; |
| modCount += size - w; |
| size = w; |
| modified = true; |
| } |
| } |
| return modified; |
| } |
removeIf(Predicate<? super E> filter)
| |
| |
| |
| public boolean removeIf(Predicate<? super E> filter) { |
| .... |
| |
| for (int i=0; modCount == expectedModCount && i < size; i++) { |
| @SuppressWarnings("unchecked") |
| final E element = (E) elementData[i]; |
| if (filter.test(element)) { |
| removeSet.set(i); |
| removeCount++; |
| } |
| } |
| ... |
| |
| if (anyToRemove) { |
| final int newSize = size - removeCount; |
| for (int i=0, j=0; (i < size) && (j < newSize); i++, j++) { |
| i = removeSet.nextClearBit(i); |
| elementData[j] = elementData[i]; |
| } |
| for (int k=newSize; k < size; k++) { |
| elementData[k] = null; |
| } |
| this.size = newSize; |
| if (modCount != expectedModCount) { |
| throw new ConcurrentModificationException(); |
| } |
| modCount++; |
| } |
| |
| return anyToRemove; |
| } |
| |
| |
| |
| peoples.removeIf(p -> p.getAge() < 20); |
| |
| System.out.println(peoples.toString()); |
removeRange(int fromIndex, int toIndex)
| |
| protected void removeRange(int fromIndex, int toIndex) { |
| modCount++; |
| int numMoved = size - toIndex; |
| System.arraycopy(elementData, toIndex, elementData, fromIndex, |
| numMoved); |
| |
| |
| int newSize = size - (toIndex-fromIndex); |
| for (int i = newSize; i < size; i++) { |
| elementData[i] = null; |
| } |
| size = newSize; |
| } |
replaceAll(UnaryOperator operator)
| |
| |
| peoples.replaceAll(p->"张三".equals(p.getName()) ? new Person() : p); |
| System.out.println(peoples); |
| |
retainAll(Collection<?> c)
| |
| public boolean retainAll(Collection<?> c) { |
| Objects.requireNonNull(c); |
| return batchRemove(c, true); |
| } |
set(int index, E element)
| |
| public E set(int index, E element) { |
| rangeCheck(index); |
| |
| E oldValue = elementData(index); |
| elementData[index] = element; |
| return oldValue; |
| } |
| |
size()返回集合中的个数
sort(Comparator<? super E> c)
| |
| |
| peoples.sort(new Comparator<Person>() { |
| @Override |
| public int compare(Person o1, Person o2) { |
| return o1.getAge()- o2.getAge(); |
| } |
| }); |
| System.out.println(peoples); |
| |
subList(int fromIndex, int toIndex)
toArray()
| |
| public Object[] toArray() { |
| return Arrays.copyOf(elementData, size); |
| } |
| |
| Person[] persons = (Person[]) peoples.toArray(); |
| |
| |
| |
| public <T> T[] toArray(T[] a) { |
| if (a.length < size) |
| |
| return (T[]) Arrays.copyOf(elementData, size, a.getClass()); |
| System.arraycopy(elementData, 0, a, 0, size); |
| if (a.length > size) |
| a[size] = null; |
| return a; |
| } |
trimToSize()
| |
| public void trimToSize() { |
| modCount++; |
| if (size < elementData.length) { |
| elementData = (size == 0) |
| ? EMPTY_ELEMENTDATA |
| : Arrays.copyOf(elementData, size); |
| } |
| } |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具