关于Java数组列表指南

56 阅读3分钟

Java中的ArrayList表示一个可调整大小的对象列表。我们可以在这个列表中添加、删除、查找、排序和替换元素。

ArrayList集合框架的一部分。它扩展了 ,实现了 接口。 按层次顺序扩展了 和 接口。AbstractList List List Collection Iterable

ArrayList Hierarchy

阵列列表的层次结构

1.ArrayList的特点

ArrayList 有以下特点 -

  1. 有序--ArrayList中的元素保留了它们的顺序,默认是这些元素被添加到列表中的顺序。
  2. 基于索引- 可以使用索引位置随机访问元素。索引以'0' 开始。
  3. 动态调整大小--当需要添加的元素多于其当前大小时,ArrayList ,动态增长。
  4. 非同步化--ArrayList默认是不同步的。程序员需要适当地使用synchronized关键字或简单地使用Vector类。
  5. 允许复制--我们可以在ArrayList中添加重复的元素。这在集合中是不可能的。

2.2.ArrayList是如何工作的?

ArrayList ArrayList类是用一个支持数组来实现的。从ArrayList中添加或删除的元素实际上是在支持数组中修改的。所有 方法都访问这个支持数组,并在同一个数组中获取/设置元素。ArrayList

ArrayList 可以被看作是Java中可调整大小的数组的实现

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, 
               Cloneable, java.io.Serializable
{
  transient Object[] elementData;   //backing array
  private int size;         //array or list size
 
  //more code
}

3.Java数组与ArrayList

数组是一个固定大小的数据结构,它的大小必须在初始化时声明。一旦声明了数组的大小,如果不创建一个新的数组,就不可能调整其大小。

Integer[] numArray = new Integer[5];

ArrayList 提供了消除这种大小限制的方法。一个ArrayList ,可以用任何初始大小(默认为16)来创建,当我们添加更多的项目时,ArrayList的大小会动态增长,不需要程序员的任何干预。

ArrayList<Integer> numList = new ArrayList<>();

许多人把ArrayList 称为动态数组

4.创建一个ArrayList

4.1.如何创建一个数组?ArrayList

为了创建ArrayList ,我们可以调用它的一个构造函数。

构造函数描述
ArrayList()这是一个默认的构造函数。它创建一个空的ArrayList,初始容量为16。
ArrayList(int capacity)它创建了一个空的ArrayList,其初始容量为capacity
ArrayList(Collection<? extends E> c)它创建了一个ArrayList,并以集合的元素初始化c

下面的程序显示了如何在Java中声明和初始化ArrayList。

ArrayList list = new ArrayList();
 
List<Integer> numbers = new ArrayList<>(6); 
 
Collection setOfElements = ...;
List<Integer> numbers = new ArrayList<>(setOfElements); 

4.2.泛型ArrayList

一个通用的ArrayList清楚地提到了它要存储的对象的类型。它有助于避免因错误的类型转换而造成的很多缺陷。

//Non-generic arraylist - NOT RECOMMENDED !!
ArrayList list = new ArrayList();
 
//Generic Arraylist with default capacity
List<Integer> numbers = new ArrayList<>(); 
 
//Generic Arraylist with the given capacity
List<Integer> numbers = new ArrayList<>(6); 
 
//Generic Arraylist initialized with another collection
List<Integer> numbers = new ArrayList<>( Arrays.asList(1,2,3,4,5) ); 

4.3.ArrayList 的原始类型

在arraylist中,我们应该只添加对象。但是如果我们需要添加原始数据类型,如int,float 等,我们可以使用它们的封装类在arraylist初始化时提供类型信息。

当我们添加intfloat 值到arraylist时,值会被自动上传到。

在给定的例子中,我们已经创建了一个包含Integer 值的数组列表。当我们添加int1 ,它被自动转换为new Integer(1)

List<Integer> numbers = new ArrayList<>(6); 
 
numbers.add(1); // This runs fine

4.4.在单行中创建和初始化ArrayList

一般来说,创建一个数组列表是一个多步骤的过程。在第一步,我们创建一个空的数组列表。在后面的步骤中,我们用元素来填充这个列表--一个接一个。

使用Arrays.asList() 和构造函数ArrayList(collection) ,我们可以在一条语句中结合这些步骤。

ArrayList<String> charList = new ArrayList<>(Arrays.asList(("A", "B", "C"));

5.从ArrayList中获取元素

为了从ArrayList ,我们有两种方法来获取一个元素。

5.1. get(index)

如果我们事先知道索引位置,那么我们可以调用get(index) ,它将返回存在于index 位置的元素

请记住,indexes 以零开始。

ArrayList<String> alphabetsList = new ArrayList<>(Arrays.asList(("A", "B", "C"));
 
String aChar = alphabetsList.get(0);  // A

5.2. iterator.next()

使用iterator()listIterator() 来获取Iterator 实例的引用。我们可以使用这个遍历器来遍历数组中的元素。

next() 方法返回当前index 位置的元素,并将索引计数增加1。调用hasNext() 方法来检查列表中是否有更多的元素可以迭代。

ArrayList<Integer> digits = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));
 
Iterator<Integer> iterator = digits.iterator();
 
while(iterator.hasNext()) 
{
  System.out.println(iterator.next());
}

程序输出。

1
2
3
4
5
6

6.遍历数组列表

6.1.迭代器

使用Iterator在数组列表上进行迭代的Java例子。

ArrayList<Integer> digits = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));
 
Iterator<Integer> iterator = digits.iterator();
 
while(iterator.hasNext()) 
{
  System.out.println(iterator.next());
}

6.2.循环

使用for循环在数组上进行迭代的Java例子。当使用for循环时,我们需要使用当前的索引计数器来获取当前的元素。

ArrayList<Integer> digits = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));
 
for(int i = 0; i < digits.size(); i++) 
{
    System.out.print(digits.get(i));
}

6.3. forEach 循环

[forEach loop](https://howtodoinjava.com/java/flow-control/enhanced-for-each-loop-in-java/)的工作原理与简单的for循环基本相同。唯一的区别是,JVM管理计数器的初始化和增量。我们在循环的每次迭代中获得下一个元素。

ArrayList<Integer> digits = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));
 
for(Integer d : digits) 
{
    System.out.print(d);
}

7.寻找数组列表的长度

为了得到数组列表的大小,我们使用size() 方法。

ArrayList<Integer> digits = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));
 
System.out.print( digits.size() );    // 6

8.对数组列表进行排序

ArrayListsort() 方法根据指定的Comparator 实例所引起的顺序对列表进行排序。列表中的所有元素必须是相互的Comparable

public class AgeSorter implements Comparator<Employee> 
{
    @Override
    public int compare(Employee e1, Employee e2) {
        //comparison logic
    }
}
ArrayList<Employee> employees = new ArrayList<>();
 
employees.add(new Employee(...));
employees.add(new Employee(...));
employees.add(new Employee(...));
 
employees.sort(new NameSorter());

9.结语

在这个Java教程中,我们学习了如何在Java中使用ArraysLists。我们学会了在ArrayList类中创建、修改和执行高级操作。