在Java中将ArrayList转换为Array

时间:2020-01-09 10:35:02  来源:igfitidea点击:

在本文中,我们将介绍如何在Java中将ArrayList转换为数组。由于ArrayList的内部实现在内部使用数组存储其元素,因此ArrayList类本身提供了toArray()方法以将ArrayList转换为数组。有两个重载的toArray()方法。

  • toArray()–以正确的顺序返回包含此列表中所有元素的数组。返回的数组将是"安全的",因为此列表不保留对其的引用。返回的数组的类型为Object。
  • toArray(T [] a)–以正确的顺序返回包含此列表中所有元素的数组。返回数组的运行时类型是指定数组的运行时类型。

尽管在Java中使用这些方法将ArrayList转换为数组的一个问题是,存储对象的引用在ArrayList和转换后的数组之间共享。对任何存储对象的任何修改也将反映在其他数据结构中。

另一种选择是不使用任何方法手动进行转换。参见示例。

首先,我们将看到一个toArray()方法的示例,其中显示了将ArrayList转换为数组,然后显示了反映的修改。为此,我们必须将自定义对象存储在ArrayList中,所以这是一个对象存储在ArrayList中的类。

public class Employee{
  private int empId;
  private String empName;
  private int age;
  Employee(int empId, String empName, int age){
    this.empId = empId;
    this.empName = empName;
    this.age = age;
  }
  public int getEmpId() {
    return empId;
  }
  public void setEmpId(int empId) {
    this.empId = empId;
  }
  public String getEmpName() {
    return empName;
  }
  public void setEmpName(String empName) {
    this.empName = empName;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
    
  @Override
  public String toString() {    
    return getEmpId() + " " + getEmpName() + " " + getAge();
  }
}

使用toArray(T [] a)方法将ArrayList转换为数组

在这里,我们有一个ArrayList存储类型Employee的对象。然后将此ArrayList转换为数组。然后,以与在数组中修改对象相同的方式修改ArrayList中的对象。如我们所见,这两个更改都反映在ArrayList和array中。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ListToArray {
  public static void main(String[] args) {
    List<Employee> empList = new ArrayList<Employee>();
    empList.add(new Employee(1, "Zhiang", 34));
    empList.add(new Employee(2, "Marie", 23));
    empList.add(new Employee(3, "Amy", 31));
    empList.add(new Employee(4, "Robbie", 45));
    // creating array of same size as list
    Employee[] empArr = new Employee[empList.size()];
    // Converting ArrayList to array   
    empArr = empList.toArray(empArr);
        
    System.out.println("Employees- " + Arrays.toString(empArr));
            
    empList.get(3).setEmpName("Hyman");
    empArr[1].setAge(45);
    System.out.println("After modifications");
    System.out.println("List elements-- " + empList);
    System.out.println("Employees- " + Arrays.toString(empArr));
  }
}

输出:

Employees- [1 Zhiang 34, 2 Marie 23, 3 Amy 31, 4 Robbie 45]
After modifications
List elements-- [1 Zhiang 34, 2 Marie 45, 3 Amy 31, 4 Hyman 45]
Employees- [1 Zhiang 34, 2 Marie 45, 3 Amy 31, 4 Hyman 45]

使用toArray()方法将ArrayList转换为数组

import java.util.ArrayList;
import java.util.List;

public class ListToArray {
  public static void main(String[] args) {
    List<String> carList = new ArrayList<String>();
    carList.add("Audi");
    carList.add("Jaguar");
    carList.add("BMW");
    carList.add("Mini Cooper");
    Object[] carArr = carList.toArray();
    for(Object car : carArr) {
      System.out.println("Car- " + car);
    }
  }
}

如我们所见,转换后的数组是Object类型的,这是使用此方法的缺点。

在没有任何API方法的情况下将ArrayList转换为数组

我们还可以通过迭代ArrayList然后将元素分配给array来将ArrayList转换为Java中的数组。

public class ListToArray {
  public static void main(String[] args) {
    List<String> carList = new ArrayList<String>();
    carList.add("Audi");
    carList.add("Jaguar");
    carList.add("BMW");
    carList.add("Mini Cooper");
    // creating array of same size as list
    String[] carArr = new String[carList.size()];

    // iterate list and assign values to array
    for(int i =0; i < carList.size(); i++){
      carArr[i] = carList.get(i);
    }      
    System.out.println("Cars- " + Arrays.toString(carArr));        
  }
}