Java教程

Java ArrayList

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);
        }
    }
}
输出:
[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);
        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中删除重复项
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4