Java ArrayList类

Java ArrayList类

文章图片
【Java ArrayList类】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中迭代集合元素的方法
有多种遍历集合元素的方法:
  1. 通过Iterator接口。
  2. 通过for-each循环。
  3. 通过ListIterator接口。
  4. 通过for循环。
  5. 通过forEach()方法。
  6. 通过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); ArrayListlist=(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

    推荐阅读