Java 反转数组列表
假设你已经通过了java中的arraylist并了解了arraylist。这篇文章包含了反转数组列表的不同例子,如下所示:
1.通过编写我们自己的函数( 使用额外的空间 ): RevArrayList类中的reverseArrayList()方法包含用整数对象反转数组的逻辑。该方法以一个数组为参数,按相反的顺序遍历,并将所有的元素添加到新创建的数组中。最后返回反转的数组列表。
// Java program for reversing an arraylist
import java.io.*;
import java.util.*;
class RevArrayList {
// Takes an arraylist as a parameter and returns
// a reversed arraylist
public ArrayList<Integer> reverseArrayList(ArrayList<Integer> alist)
{
// Arraylist for storing reversed elements
ArrayList<Integer> revArrayList = new ArrayList<Integer>();
for (int i = alist.size() - 1; i >= 0; i--) {
// Append the elements in reverse order
revArrayList.add(alist.get(i));
}
// Return the reversed arraylist
return revArrayList;
}
// Iterate through all the elements and print
public void printElements(ArrayList<Integer> alist)
{
for (int i = 0; i < alist.size(); i++) {
System.out.print(alist.get(i) + " ");
}
}
}
public class GFG {
public static void main(String[] args)
{
RevArrayList obj = new RevArrayList();
// Declaring arraylist without any initial size
ArrayList<Integer> arrayli = new ArrayList<Integer>();
// Appending elements at the end of the list
arrayli.add(new Integer(1));
arrayli.add(new Integer(2));
arrayli.add(new Integer(3));
arrayli.add(new Integer(4));
System.out.print("Elements before reversing:");
obj.printElements(arrayli);
arrayli = obj.reverseArrayList(arrayli);
System.out.print("\nElements after reversing:");
obj.printElements(arrayli);
}
}
输出
Elements before reversing:1 2 3 4
Elements after reversing:4 3 2 1
1.通过编写我们自己的函数( 不使用额外的空间 ): 在前面的例子中,另外使用了一个数组来存储所有反转的元素,这需要更多的空间。为了避免这种情况,可以使用同一个数组表来进行反转。
逻辑:
1.循环运行n/2次,其中’n’是数组表中的元素数量。
2.在第一遍中,交换第一个和第n个元素
3.在第二遍中,交换第二个和(n-1)个元素,以此类推,直到到达数组列表的中间。
4.循环结束后返回数组列表。
// Java program for reversing an arraylist
import java.io.*;
import java.util.*;
class RevArrayList {
// Takes an arraylist as a parameter and returns
// a reversed arraylist
public ArrayList<Integer> reverseArrayList(ArrayList<Integer> alist)
{
// Arraylist for storing reversed elements
// this.revArrayList = alist;
for (int i = 0; i < alist.size() / 2; i++) {
Integer temp = alist.get(i);
alist.set(i, alist.get(alist.size() - i - 1));
alist.set(alist.size() - i - 1, temp);
}
// Return the reversed arraylist
return alist;
}
// Iterate through all the elements and print
public void printElements(ArrayList<Integer> alist)
{
for (int i = 0; i < alist.size(); i++) {
System.out.print(alist.get(i) + " ");
}
}
}
public class GFG1 {
public static void main(String[] args)
{
RevArrayList obj = new RevArrayList();
// Declaring arraylist without any initial size
ArrayList<Integer> arrayli = new ArrayList<Integer>();
// Appending elements at the end of the list
arrayli.add(new Integer(12));
arrayli.add(new Integer(13));
arrayli.add(new Integer(123));
arrayli.add(new Integer(54));
arrayli.add(new Integer(1));
System.out.print("Elements before reversing: ");
obj.printElements(arrayli);
arrayli = obj.reverseArrayList(arrayli);
System.out.print("\nElements after reversing: ");
obj.printElements(arrayli);
}
}
输出
Elements before reversing: 12 13 123 54 1
Elements after reversing: 1 54 123 13 12
2.通过使用Collections类: Collections是java.util包中的一个类,它包含各种静态方法,用于搜索、排序、反转、查找最大值、min….等。我们可以利用内置的Collections.reverse()方法来反转一个数组列表。它接受一个列表作为输入参数,并返回反转的列表。
// Java program for reversing an arraylist
import java.io.*;
import java.util.*;
public class GFG2 {
public static void main(String[] args)
{
// Declaring arraylist without any initial size
ArrayList<Integer> arrayli = new ArrayList<Integer>();
// Appending elements at the end of the list
arrayli.add(new Integer(9));
arrayli.add(new Integer(145));
arrayli.add(new Integer(878));
arrayli.add(new Integer(343));
arrayli.add(new Integer(5));
System.out.print("Elements before reversing: ");
printElements(arrayli);
// Collections.reverse method takes a list as a
// parameter and reverses the passed parameter
//(no new array list is required)
Collections.reverse(arrayli);
System.out.print("\nElements after reversing: ");
printElements(arrayli);
}
// Iterate through all the elements and print
public static void printElements(ArrayList<Integer> alist)
{
for (int i = 0; i < alist.size(); i++) {
System.out.print(alist.get(i) + " ");
}
}
}
输出
Elements before reversing: 9 145 878 343 5
Elements after reversing: 5 343 878 145 9
3.反转用户定义对象的数组: 创建了一个Employee类,用于创建用户定义的对象,EmployeeID、EmployeeName、DepartmentName为类变量,在构造函数中被初始化。我们创建了一个数组,只接受Employee(用户定义)对象。这些对象通过add()方法被添加到数组中。使用集合类中内置的reverse()方法将数组列表反转。
printElements()静态方法的使用只是为了避免在程序中多写一个类。
// Java program for reversing an arraylist
import java.io.*;
import java.util.*;
class Employee {
int empID;
String empName;
String deptName;
// Constructor for initializing the class variables
public Employee(int empID, String empName, String deptName)
{
this.empID = empID;
this.empName = empName;
this.deptName = deptName;
}
}
public class GFG3 {
public static void main(String[] args)
{
// Declaring arraylist without any initial size
ArrayList<Employee> arrayli = new ArrayList<Employee>();
// Creating user defined objects
Employee emp1 = new Employee(123, "Rama", "Facilities");
Employee emp2 = new Employee(124, "Lakshman", "Transport");
Employee emp3 = new Employee(125, "Ravan", "Packing");
// Appending all the objects for arraylist
arrayli.add(emp1);
arrayli.add(emp2);
arrayli.add(emp3);
System.out.print("Elements before reversing: ");
printElements(arrayli);
// Collections.reverse method takes a list as a
// parameter and reverse the list
Collections.reverse(arrayli);
System.out.print("\nElements after reversing: ");
printElements(arrayli);
}
// Iterate through all the elements and print
public static void printElements(ArrayList<Employee> alist)
{
for (int i = 0; i < alist.size(); i++) {
System.out.print("\n EmpID:" + alist.get(i).empID +
", EmpName:" + alist.get(i).empName + ", Department:" +
alist.get(i).deptName);
}
}
}
输出
Elements before reversing:
EmpID:123, EmpName:Rama, Department:Facilities
EmpID:124, EmpName:Lakshman, Department:Transport
EmpID:125, EmpName:Ravan, Department:Packing
Elements after reversing:
EmpID:125, EmpName:Ravan, Department:Packing
EmpID:124, EmpName:Lakshman, Department:Transport
EmpID:123, EmpName:Rama, Department:Facilities