Java ArrayList类使用动态数组来存储元素。它继承AbstractList类并实现List接口。
关于Java ArrayList类的要点是:
- Java ArrayList类可以包含重复的元素。
- Java ArrayList类维护插入顺序。
- Java ArrayList类不同步。
- Java ArrayList允许随机访问, 因为数组基于索引工作。
- 在Java ArrayList类中, 操作很慢, 因为如果从数组列表中删除任何元素, 则需要进行很多移位。
ArrayList类的层次结构
如上图所示, Java ArrayList类扩展了实现List接口的AbstractList类。 List接口按层次结构扩展了Collection和Iterable接口。
ArrayList类声明
我们来看一下java.util.ArrayList类的声明。
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, Serializable
Java ArrayList的构造方法
建设者 | 描述 |
---|---|
ArrayList() | 它用于构建一个空数组列表。 |
ArrayList(Collection <?扩展E> c) | 它用于构建使用集合c的元素初始化的数组列表。 |
ArrayList(int capacity) | 它用于构建具有指定初始容量的阵列列表。 |
Java ArrayList的方法
方法 | 描述 |
---|---|
void add(int index, E element) | 用于将指定的元素插入列表中的指定位置。 |
boolean add(E e) | 它用于将指定的元素追加到列表的末尾。 |
布尔addAll(Collection <?扩展E> c) | 它用于将指定集合中的所有元素附加到此列表的末尾, 以指定集合的迭代器返回它们的顺序。 |
布尔addAll(int索引, Collection <?扩展E> c) | 从列表的指定位置开始, 它用于附加指定集合中的所有元素。 |
void clear() | 它用于从此列表中删除所有元素。 |
void ensureCapacity(int requiredCapacity) | 它用于增强ArrayList实例的容量。 |
E get(int index) | 它用于从列表的特定位置获取元素。 |
boolean isEmpty() | 如果列表为空, 则返回true, 否则返回false。 |
int lastIndexOf(Object o) | 它用于返回指定元素最后一次出现在此列表中的索引;如果列表不包含此元素, 则返回-1。 |
Object[] toArray() | 它用于以正确的顺序返回包含此列表中所有元素的数组。 |
<T> T [] toArray(T [] a) | 它用于以正确的顺序返回包含此列表中所有元素的数组。 |
Object clone() | 它用于返回ArrayList的浅表副本。 |
boolean contains(Object o) | 如果列表包含指定的元素, 则返回true |
int indexOf(Object o) | 它用于返回指定元素首次出现在此列表中的索引, 如果列表不包含此元素, 则返回-1。 |
E remove(int index) | 它用于删除列表中指定位置上存在的元素。 |
boolean remove(Object o) | 它用于删除指定元素的第一次出现。 |
布尔值removeAll(Collection <?> c) | 它用于从列表中删除所有元素。 |
布尔值removeIf(Predicate <?super E>过滤器) | 它用于从满足给定谓词的列表中删除所有元素。 |
protected void removeRange(int fromIndex, int toIndex) | 它用于删除位于给定范围内的所有元素。 |
void replaceAll(UnaryOperator <E>运算符) | 它用于将列表中的所有元素替换为指定的元素。 |
void keepAll(Collection <?> c) | 它用于保留列表中指定集合中存在的所有元素。 |
E set(int index, E element) | 它用于替换列表中位于指定位置的指定元素。 |
无效排序(Comparator <?super E> c) | 用于根据指定的比较器对列表中的元素进行排序。 |
Spliterator<E> spliterator() | 它用于在列表中的元素上创建分隔符。 |
List <E> subList(int fromIndex, int toIndex) | 它用于获取位于给定范围内的所有元素。 |
int size() | 它用于返回列表中存在的元素数。 |
void trimToSize() | 它用于将ArrayList实例的容量调整为列表的当前大小。 |
Java非通用Vs。通用集合
Java收集框架在JDK 1.5之前是非通用的。从1.5开始, 它是通用的。
Java新的通用集合允许你在集合中仅包含一种类型的对象。现在它是类型安全的, 因此在运行时不需要类型转换。
让我们看看创建Java集合的旧的非通用示例。
ArrayList al=new ArrayList();//creating old non-generic arraylist
让我们看看创建Java集合的新通用示例。
ArrayList<String> al=new ArrayList<String>();//creating new generic arraylist
在通用集合中, 我们用尖括号指定类型。现在, ArrayList被强制具有唯一指定类型的对象。如果你尝试添加另一种类型的对象, 则会产生编译时错误。
有关Java泛型的更多信息, 请单击此处Java泛型教程。
Java ArrayList示例
import java.util.*;
class ArrayList1{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();//Creating arraylist
list.add("Ravi");//Adding object in arraylist
list.add("Vijay");
list.add("Ravi");
list.add("Ajay");
//Invoking arraylist object
System.out.println(list);
}
}
}
[Ravi, Vijay, Ravi, Ajay]
在Java中迭代集合元素的方法
有多种遍历集合元素的方法:
- 通过Iterator接口。
- 通过for-each循环。
- 通过ListIterator接口。
- 通过for循环。
- 通过forEach()方法。
- 通过forEachRemaining()方法。
通过Iterator界面迭代Collection
让我们看一个使用Iterator接口遍历ArrayList元素的示例。
import java.util.*;
class ArrayList2{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();//Creating arraylist
list.add("Ravi");//Adding object in arraylist
list.add("Vijay");
list.add("Ravi");
list.add("Ajay");
//Traversing list through Iterator
Iterator itr=list.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
立即测试
Ravi
Vijay
Ravi
Ajay
通过for-each循环迭代Collection
让我们看一个使用for-each循环遍历ArrayList元素的示例
import java.util.*;
class ArrayList3{
public static void main(String args[]){
ArrayList<String> al=new ArrayList<String>();
al.add("Ravi");
al.add("Vijay");
al.add("Ravi");
al.add("Ajay");
//Traversing list through for-each loop
for(String obj:al)
System.out.println(obj);
}
}
Ravi
Vijay
Ravi
Ajay
通过剩余方式迭代Collection
让我们看一个通过其他方式遍历ArrayList元素的示例
import java.util.*;
class ArrayList4{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();//Creating arraylist
list.add("Ravi");//Adding object in arraylist
list.add("Vijay");
list.add("Ravi");
list.add("Ajay");
System.out.println("Traversing list through List Iterator:");
//Here, element iterates in reverse order
ListIterator<String> list1=list.listIterator(list.size());
while(list1.hasPrevious())
{
String str=list1.previous();
System.out.println(str);
}
System.out.println("Traversing list through for loop:");
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i));
}
System.out.println("Traversing list through forEach() method:");
//The forEach() method is a new feature, introduced in Java 8.
list.forEach(a->{ //Here, we are using lambda expression
System.out.println(a);
});
System.out.println("Traversing list through forEachRemaining() method:");
Iterator<String> itr=list.iterator();
itr.forEachRemaining(a-> //Here, we are using lambda expression
{
System.out.println(a);
});
}
}
Traversing list through List Iterator:
Ajay
Ravi
Vijay
Ravi
Traversing list through for loop:
Ravi
Vijay
Ravi
Ajay
Traversing list through forEach() method:
Ravi
Vijay
Ravi
Ajay
Traversing list through forEachRemaining() method:
Ravi
Vijay
Ravi
Ajay
Java ArrayList中的用户定义的类对象
让我们看一个将学生类对象存储在数组列表中的示例。
class Student{
int rollno;
String name;
int age;
Student(int rollno, String name, int age){
this.rollno=rollno;
this.name=name;
this.age=age;
}
}
import java.util.*;
class ArrayList5{
public static void main(String args[]){
//Creating user-defined class objects
Student s1=new Student(101, "Sonoo", 23);
Student s2=new Student(102, "Ravi", 21);
Student s2=new Student(103, "Hanumat", 25);
//creating arraylist
ArrayList<Student> al=new ArrayList<Student>();
al.add(s1);//adding Student class object
al.add(s2);
al.add(s3);
//Getting Iterator
Iterator itr=al.iterator();
//traversing elements of ArrayList object
while(itr.hasNext()){
Student st=(Student)itr.next();
System.out.println(st.rollno+" "+st.name+" "+st.age);
}
}
}
101 Sonoo 23
102 Ravi 21
103 Hanumat 25
Java ArrayList序列化和反序列化示例
让我们看一个序列化ArrayList对象然后反序列化它的示例。
import java.io.*;
import java.util.*;
class ArrayList6 {
public static void main(String [] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("Ravi");
al.add("Vijay");
al.add("Ajay");
try
{
//Serialization
FileOutputStream fos=new FileOutputStream("file");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(al);
fos.close();
oos.close();
//Deserialization
FileInputStream fis=new FileInputStream("file");
ObjectInputStream ois=new ObjectInputStream(fis);
ArrayList list=(ArrayList)ois.readObject();
System.out.println(list);
}catch(Exception e)
{
System.out.println(e);
}
}
}
[Ravi, Vijay, Ajay]
Java ArrayList示例添加元素
在这里, 我们看到了添加元素的不同方法。
import java.util.*;
class ArrayList7{
public static void main(String args[]){
ArrayList<String> al=new ArrayList<String>();
System.out.println("Initial list of elements: "+al);
//Adding elements to the end of the list
al.add("Ravi");
al.add("Vijay");
al.add("Ajay");
System.out.println("After invoking add(E e) method: "+al);
//Adding an element at the specific position
al.add(1, "Gaurav");
System.out.println("After invoking add(int index, E element) method: "+al);
ArrayList<String> al2=new ArrayList<String>();
al2.add("Sonoo");
al2.add("Hanumat");
//Adding second list elements to the first list
al.addAll(al2);
System.out.println("After invoking addAll(Collection<? extends E> c) method: "+al);
ArrayList<String> al3=new ArrayList<String>();
al3.add("John");
al3.add("Rahul");
//Adding second list elements to the first list at specific position
al.addAll(1, al3);
System.out.println("After invoking addAll(int index, Collection<? extends E> c) method: "+al);
}
}
Initial list of elements: []
After invoking add(E e) method: [Ravi, Vijay, Ajay]
After invoking add(int index, E element) method: [Ravi, Gaurav, Vijay, Ajay]
After invoking addAll(Collection<? extends E> c) method:
[Ravi, Gaurav, Vijay, Ajay, Sonoo, Hanumat]
After invoking addAll(int index, Collection<? extends E> c) method:
[Ravi, John, Rahul, Gaurav, Vijay, Ajay, Sonoo, Hanumat]
Java ArrayList示例删除元素
在这里, 我们看到了删除元素的不同方法。
import java.util.*;
class ArrayList8 {
public static void main(String [] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("Ravi");
al.add("Vijay");
al.add("Ajay");
al.add("Anuj");
al.add("Gaurav");
System.out.println("An initial list of elements: "+al);
//Removing specific element from arraylist
al.remove("Vijay");
System.out.println("After invoking remove(object) method: "+al);
//Removing element on the basis of specific position
al.remove(0);
System.out.println("After invoking remove(index) method: "+al);
//Creating another arraylist
ArrayList<String> al2=new ArrayList<String>();
al2.add("Ravi");
al2.add("Hanumat");
//Adding new elements to arraylist
al.addAll(al2);
System.out.println("Updated list : "+al);
//Removing all the new elements from arraylist
al.removeAll(al2);
System.out.println("After invoking removeAll() method: "+al);
//Removing elements on the basis of specified condition
al.removeIf(str -> str.contains("Ajay")); //Here, we are using Lambda expression
System.out.println("After invoking removeIf() method: "+al);
//Removing all the elements available in the list
al.clear();
System.out.println("After invoking clear() method: "+al);
}
}
An initial list of elements: [Ravi, Vijay, Ajay, Anuj, Gaurav]
After invoking remove(object) method: [Ravi, Ajay, Anuj, Gaurav]
After invoking remove(index) method: [Ajay, Anuj, Gaurav]
Updated list : [Ajay, Anuj, Gaurav, Ravi, Hanumat]
After invoking removeAll() method: [Ajay, Anuj, Gaurav]
After invoking removeIf() method: [Anuj, Gaurav]
After invoking clear() method: []
保留所有Java方法的ArrayList示例
import java.util.*;
class ArrayList9{
public static void main(String args[]){
ArrayList<String> al=new ArrayList<String>();
al.add("Ravi");
al.add("Vijay");
al.add("Ajay");
ArrayList<String> al2=new ArrayList<String>();
al2.add("Ravi");
al2.add("Hanumat");
al.retainAll(al2);
System.out.println("iterating the elements after retaining the elements of al2");
Iterator itr=al.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
iterating the elements after retaining the elements of al2
Ravi
isEmpty()方法的Java ArrayList示例
import java.util.*;
class ArrayList10{
public static void main(String [] args)
{
ArrayList<String> al=new ArrayList<String>();
System.out.println("Is ArrayList Empty: "+al.isEmpty());
al.add("Ravi");
al.add("Vijay");
al.add("Ajay");
System.out.println("After Insertion");
System.out.println("Is ArrayList Empty: "+al.isEmpty());
}
}
Is ArrayList Empty: true
After Insertion
Is ArrayList Empty: false
set()和get()方法的Java ArrayList示例
import java.util.*;
class ArrayList11 {
public static void main(String [] args)
{
ArrayList<String> al=new ArrayList<String>();
al.add("Ravi");
al.add("Vijay");
al.add("Ajay");
System.out.println("Before update: "+al.get(1));
//Updating an element at specific position
al.set(1, "Gaurav");
System.out.println("After update: "+al.get(1));
}
}
Before update: Vijay
After update: Gaurav
Java ArrayList示例:书籍
让我们看一个ArrayList示例, 其中我们将书添加到列表并打印所有书。
import java.util.*;
class Book {
int id;
String name, author, publisher;
int quantity;
public Book(int id, String name, String author, String publisher, int quantity) {
this.id = id;
this.name = name;
this.author = author;
this.publisher = publisher;
this.quantity = quantity;
}
}
public class ArrayListExample {
public static void main(String[] args) {
//Creating list of Books
List<Book> list=new ArrayList<Book>();
//Creating Books
Book b1=new Book(101, "Let us C", "Yashwant Kanetkar", "BPB", 8);
Book b2=new Book(102, "Data Communications & Networking", "Forouzan", "Mc Graw Hill", 4);
Book b3=new Book(103, "Operating System", "Galvin", "Wiley", 6);
//Adding Books to list
list.add(b1);
list.add(b2);
list.add(b3);
//Traversing list
for(Book b:list){
System.out.println(b.id+" "+b.name+" "+b.author+" "+b.publisher+" "+b.quantity);
}
}
}
立即测试
输出:
101 Let us C Yashwant Kanetkar BPB 8
102 Data Communications & Networking Forouzan Mc Graw Hill 4
103 Operating System Galvin Wiley 6
评论前必须登录!
注册