ArrayList是什么
ArrayList可以看作是一个动态数组,提供了自动扩容的能力,意味着它能够根据需要自动调整其大小以容纳更多的元素,而无需预先指定数组的容量。
使用ArrayList需要加入包
import java.util.ArryList
ArrayList与普通数组的不同
一 、大小容量
普通数组:长度在创建时就必须确定,并且之后不能更改。
ArrayList:是动态数组的实现,其大小可以根据需要自动调整。
二 、类型存储
普通数组:可以直接存储基本类型(如int、double)和对象(如String、Object)。
ArrayList:由于ArrayList是基于Object数组实现的,因此它只能直接存储对象。
如果你要存储基本类型,需要使用它们的包装类来进行自动装箱和拆箱,这可能会影响性能。
Java的包装类包括:
Byte 对应 byte
Short 对应 short
Integer 对应 int
Long 对应 long
Float 对应 float
Double 对应 double
Character 对应 char
Boolean 对应 boolean
三 、API丰富性
普通数组:提供的功能较为基础,主要是通过索引来访问和修改元素。
ArrayList:提供了许多便利的方法
四 、内存使用和性能
普通数组:由于长度固定,没有额外的管理开销,且直接存储基本类型可以节省内存空间,因此在已知大小且不需要动态调整时,性能通常优于ArrayList。
ArrayList:动态扩容机制虽然提供了灵活性,但在扩容过程中涉及数组复制,可能会导致性能下降,尤其是在频繁插入和删除操作时。
存储对象类型和自动装箱/拆箱操作也会带来额外的内存和性能开销。
五 、遍历方式
普通数组:遍历通常通过for循环和索引进行。
ArrayList:传统的索引遍历外,还可以使用迭代器(Iterator)或列表迭代器(ListIterator)进行更灵活的遍历,支持foreach循环。
ArrayList的使用方法
构造方法
空构造
public ArrayList()
默认构造一个初始容量为 10 的空列表。
构造指定的容量
public ArrayList(int initialCapacity)
构造具有指定初始容量的空列表
构造将一个集合拷贝进去
public ArrayList(Collection<? extends E> c)
增加与减小元素
增加元素
使用add();
add(E element):可以添加一个元素在尾部
add(int index, E element):在某个索引添加元素
addAll(Collection<? extends E> c): 在列表末尾添加另一个集合的所有元素。
addAll(int index, Collection<? extends E> c): 从指定位置开始,插入另一个集合的所有元素。
addLast(E element);在尾部添加元素
addFirst(E element);在首部添加元素
减少元素
remove(Object o)
删除第一次遇到的o对象
remove(int index)
删除索引的元素
removeLast()
删去最后一个元素
removeFirst()
删去第一个元素
removeAll(Collection<?> c)
从当前列表中移除出现在指定集合c中的所有元素。这个方法会比较两个集合中的元素,并移除所有在当前列表中也存在于指定集合中的元素
removeIf(Predicate<? super E> filter)
根据提供的谓词(Predicate)来过滤并移除满足条件的元素。
访问与修改元素
访问元素
使用get(a);访问a位置的元素
使用getFirst();访问第一个元素
使用getLast();访问最后一个元素
import java.util.ArrayList;
public class Main{
public static void main(String[] args)
{
ArrayList<String> a = new ArrayList<>();
a.add("A");
a.add("B");
a.add("C");
a.add("D");
a.add("E");
System.out.println(a.get(2)); //C
System.out.println(a.getFirst()); //A
System.out.println(a.getLast()); //F
}
}
修改元素
set(int index,E a)
改变索引位置的元素
查找元素
contains()
查找是否有该元素,有就返回ture如果没有false
indexOf()
找到了就返回第一个索引,没有就返回-1
lastindexOf()
找最后一个出现的索引,没找到就返回-1
容器操作
size()
返回容器的大小