个性化阅读
专注于IT技术分析

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);
	    	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
赞(0)
未经允许不得转载:srcmini » Java ArrayList类

评论 抢沙发

评论前必须登录!