Java ArrayList
Java ArrayList 类使用 dynamic array 来存储元素。它就像一个数组,但是没有没有大小限制。我们可以随时添加或删除元素。因此,它比传统阵列灵活得多。在 java.util 包中可以找到它。就像C ++中的Vector。
Java中的ArrayList也可以具有重复的元素。它实现了List接口,因此我们可以在此处使用List接口的所有方法。 ArrayList在内部维护插入顺序。
它继承了AbstractList类并实现了 List接口。
关于Java ArrayList类的要点是:
Java ArrayList类可以包含重复的元素。
Java ArrayList类维护插入顺序。
Java ArrayList类不是已同步。
Java ArrayList允许随机访问,因为数组基于索引工作。
在ArrayList中,操作要比Java中的LinkedList慢一点,因为如果从数组列表中删除任何元素,则需要进行很多转换。
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
ArrayList的构造函数
构造函数 |
说明 |
ArrayList() |
它用于构建一个空数组列表。 |
ArrayList(Collection
<? extends E> c) |
它用于构建使用集合c的元素初始化的数组列表。 |
ArrayList(int capacity) |
它用于构建具有指定初始容量的阵列列表。 |
ArrayList的方法
方法 |
说明 |
void add(int index, E element) |
用于将指定的元素插入列表中的指定位置。 |
boolean add(E e) |
用于将指定的元素添加到列表的末尾。 |
boolean addAll(Collection<? extends E> c) |
它用于将指定集合中的所有元素附加到此列表的末尾,以指定集合的迭代器返回它们的顺序。 |
boolean addAll(int index, Collection<? extends E> c) |
用于从列表的指定位置开始添加指定集合中的所有元素。 |
void clear() |
它用于从此列表中删除所有元素。 |
void ensureCapacity(int requiredCapacity) |
它用于增强ArrayList实例的容量。 |
E get(int index) |
它用于从列表的特定位置获取元素。 |
boolean isEmpty() |
如果列表为空,则返回true,否则返回false。 |
Iterator() |
|
listIterator() |
|
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) |
用于删除指定元素的第一次出现。 |
boolean removeAll(Collection<?> c) |
它用于从列表中删除所有元素。 |
boolean removeIf(Predicate
<? super E> filter) |
它用于从满足给定谓词的列表中删除所有元素。 |
protected void removeRange(int fromIndex, int toIndex) |
用于删除位于给定范围内的所有元素。 |
void replaceAll(UnaryOperator<E> operator) |
用于将列表中的所有元素替换为指定的元素。 |
void retainAll (Collection <?> c) |
它用于保留列表中存在于指定集合中的所有元素。 |
E set(int index,E element) |
用于替换列表中位于指定位置的指定元素。 |
void sort(Comparator <? super E> c) |
用于根据指定的比较器对列表中的元素进行排序。 |
Spliterator <E> spliterator() |
它用于在列表中的元素上创建分隔符。 |
List <E> subList(int fromIndex,int toIndex) |
用于获取位于给定范围内的所有元素。 |
int size() |
它用于返回列表中存在的元素数。 |
void trimToSize() |
用于将ArrayList实例的容量调整为列表的当前大小。 |
Java非通用Vs通用集合
在JDK 1.5之前,Java集合框架是非通用的。从1.5开始,它是通用的。
Java新的通用集合允许您在集合中仅包含一种类型的对象。现在它是类型安全的,因此在运行时不需要类型转换。
让我们看看创建Java集合的旧的非通用示例。
ArrayList list=new ArrayList();
//creating old non-generic arraylist
让我们看看创建Java集合的新通用示例。
ArrayList<String> list=new ArrayList<String>();
//creating new generic arraylist
在通用集合中,我们在尖括号中指定类型。现在,ArrayList被强制具有唯一指定类型的对象。如果尝试添加另一种类型的对象,则它会给出编译时错误。
有关Java泛型的更多信息,请单击此处Java泛型教程。
Java ArrayList示例
import java.util.*;
public class ArrayListExample1{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();
list.add("Mango");
list.add("Apple");
list.add("Banana");
list.add("Grapes");
System.out.println(list);
}
}
输出:
[Mango, Apple, Banana, Grapes]
使用Iterator迭代ArrayList
让我们看一个使用Iterator接口遍历ArrayList元素的示例。
import java.util.*;
public class ArrayListExample2{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();
list.add("Mango");
list.add("Apple");
list.add("Banana");
list.add("Grapes");
Iterator itr=list.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
输出:
Mango
Apple
Banana
Grapes
使用For-each循环迭代ArrayList
我们来看一个使用for-each循环遍历ArrayList元素的示例
import java.util.*;
public class ArrayListExample3{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();
list.add("Mango");
list.add("Apple");
list.add("Banana");
list.add("Grapes");
for(String fruit:list) System.out.println(fruit);
}
}
输出:
Mango
Apple
Banana
Grapes
获取并设置ArrayList
get()方法返回指定索引处的元素,而 set()方法更改元素。
import java.util.*;
public class ArrayListExample4{
public static void main(String args[]){
ArrayList<String>al=new ArrayList<String>();
al.add("Mango");
al.add("Apple");
al.add("Banana");
al.add("Grapes");
System.out.println("Returning element: "+al.get(1));
//it will return the 2nd element, because index starts from 0
al.set(1,"Dates");
System.out.println(fruit);
}
}
输出:
Returning element: Apple
Mango
Dates
Banana
Grapes
如何对ArrayList进行排序
java.util 包提供了一个实用类 Collections ,该类具有静态方法sort()。使用 Collections.sort()方法,我们可以轻松地对ArrayList进行排序。
import java.util.*;
class SortArrayList{
public static void main(String args[]){
List<String>list1=new ArrayList<String>();
list1.add("Mango");
list1.add("Apple");
list1.add("Banana");
list1.add("Grapes");
Collections.sort(list1);
System.out.println(fruit);
System.out.println("Sorting numbers...");
List<Integer> list2=new ArrayList<Integer>();
list2.add(21);
list2.add(11);
list2.add(51);
list2.add(1);
Collections.sort(list2);
for(Integer number:list2) System.out.println(number);
}
}
输出:
Apple
Banana
Grapes
Mango
Sorting numbers...
1
11
21
51
在Java中迭代集合元素的方式
有多种遍历集合元素的方式:
通过Iterator接口。
通过for-each循环。
通过ListIterator接口。
通过循环。
通过forEach()方法。
通过forEachRemaining()方法。
通过其余方式迭代Collection
让我们看一个示例,以其他方式遍历ArrayList元素
import java.util.*;
class ArrayList4{
public static void main(String args[]){
ArrayList<String> list=new ArrayList<String>();
list.add("Ravi");
list.add("Vijay");
list.add("Ravi");
list.add("Ajay");
System.out.println("Traversing list through List Iterator:");
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->{
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中的用户定义的类对象
让我们看一个示例,其中将Student类对象存储在数组列表中。
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[]){
class objects Student s1=new Student(101,"Sonoo",23);
Student s2=new Student(102,"Ravi",21);
Student s2=new Student(103,"Hanumat",25);
ArrayList<
Student>
al=new ArrayList<
Student>
();
al.add(s1);
class object al.add(s2);
al.add(s3);
Iterator itr=al.iterator();
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 {
Stream fos=new FileOutputStream("file");
ObjectOutputStream oos=new ObjectOutputStream(fos);
oos.writeObject(al);
fos.close();
oos.close();
Stream 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);
}
}
}
输出:
添加元素的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);
al.add("Ravi");
al.add("Vijay");
al.add("Ajay");
System.out.println("After invoking add(E e) method: "+al);
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");
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");
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);
al.remove("Vijay");
System.out.println("After invoking remove(object) method: "+al);
al.remove(0);
System.out.println("After invoking remove(index) method: "+al);
ArrayList<String> al2=new ArrayList<String>();
al2.add("Ravi");
al2.add("Hanumat");
al.addAll(al2);
System.out.println("Updated list : "+al);
al.removeAll(al2);
System.out.println("After invoking removeAll() method: "+al);
al.removeIf(str -> str.contains("Ajay"));
System.out.println("After invoking removeIf() method: "+al);
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: []
retainAll()方法的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
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 ArrayListExample20 {
public static void main(String[] args) {
List<Book>list=new ArrayList<Book>();
Book b1=new Book(101,"Let us C","Yashwant Kanetkar","BPB",8);
Book b2=new Book(102,"Data Communications and Networking","Forouzan","Mc Graw Hill",4);
Book b3=new Book(103,"Operating System","Galvin","Wiley",6);
list.add(b1);
list.add(b2);
list.add(b3);
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 and Networking Forouzan Mc Graw Hill 4
103 Operating System Galvin Wiley 6
相关主题
如何在Java中对ArrayList进行排序
Array与ArrayList之间的差异
何时在Java中使用ArrayList和LinkedList
ArrayList和LinkedList之间的区别
ArrayList与Vector之间的差异
如何在Java中比较两个ArrayList
如何反转ArrayList在Java中
如何使ArrayList只读
数组长度与Java中ArrayList的size()之间的差异
如何同步ArrayList在Java中
如何将ArrayList转换为Array Java中的数组到ArrayList
Java中的Array vs ArrayList
如何按降序对Java ArrayList进行排序
如何从Java中的ArrayList中删除重复项