Ồ, mảng Java. Họ là đối tượng yêu và ghét mãnh liệt của hàng trăm nhà phát triển phần mềm mới bắt đầu. Họ nói rằng việc thêm các phần tử vào một mảng đã được khởi tạo là không thể… Thực ra là có thể, nhưng không phải theo nghĩa cổ điển… và nó không thuận tiện lắm. Việc thêm các phần tử mới vào một mảng đã được khởi tạo là một mẹo nhỏ. Tuy nhiên, những thủ thuật này có thể hữu ích trong một cuộc phỏng vấn ... và đôi khi trong công việc của một lập trình viên. Để đảm bảo rằng bạn thích sử dụng kiểu dữ liệu này và biết cách sử dụng nó một cách hiệu quả, chúng tôi đã viết một hướng dẫn về cách thêm một phần tử mới vào một mảng Java. Ngoài việc xem kỹ lý thuyết và các mẫu mã, hãy nhớ kiểm tra và hoàn thành các vấn đề thực hành có trong bài đăng. Cách Thêm Phần Tử Mới Vào Mảng Trong Java - 1

Mảng trong Java là gì

Hãy nhớ lại Mảng là gì và cách tạo nó trong Java. Nếu bạn nhớ điều đó, vui lòng chuyển sang tiêu đề phụ tiếp theo "5 cách để thêm phần tử mới vào mảng Java". Tài liệu Java chính thức của Oracle nói rằng mảng là một chuỗi các giá trị thuộc cùng một kiểu dữ liệu. Một tập hợp các số nguyên là một ví dụ hoàn hảo về một mảng trong Java . Tất cả các giá trị bạn xác định có một vị trí cụ thể trong mảng được gọi là chỉ mục . Dưới đây là các cách khai báo và khởi tạo mảng:

int[] myArray = new int[10];
int[] myArray1 = {1, 0, 3, 17, 5, 6, 7, 8, 9, 10}
Trong trường hợp đầu tiên, chúng tôi đã xác định một mảng myArray và tạo Java để phân bổ không gian cho một mảng gồm 10 phần tử, trong myArray1 thứ hai , chúng tôi ngay lập tức nhập 10 giá trị vào đó. Trong cả hai trường hợp, phần tử 11 không thể được đẩy vào mảng một cách đơn giản. Để thực hiện các thao tác với mảng, các nhà phát triển thao tác với các chỉ số của các giá trị mà một mảng chứa. Chúng ta nên làm gì? Chúng ta hãy xem những cách phổ biến nhất để thêm vào mảng.

5 cách để thêm phần tử mới vào mảng Java

Chà, đây là thủ thuật của chúng tôi để làm cho cái bất biến có vẻ như có thể thay đổi được.
  • Chuyển đổi một mảng thành một danh sách
  • Tạo mảng mới có dung lượng lớn hơn và thêm phần tử mới vào mảng
  • Triển khai System.arraycopy()
  • Sao chép mảng bằng Apache Commons
  • Áp dụng phương thức ArrayCopyOf()
Chúng ta hãy xem xét kỹ hơn những cách này để thêm một phần tử vào một mảng.

1. Chuyển Mảng thành Danh sách

Vì chúng ta không thể trực tiếp thêm phần tử mới vào mảng, điều tốt nhất tiếp theo cần làm là chuyển đổi chúng thành danh sách, thêm phần tử mới và chuyển đổi lại các giá trị thành mảng. Cách đầu tiên để chuyển đổi một mảng thành một danh sách là sử dụng asList() để tạo một ArrayList mới. Sau khi phạm vi giá trị được chuyển đổi thành công, hãy sử dụng ListAdd() để chèn giá trị. Khi bạn không cần chỉnh sửa một mảng nữa, hãy chuyển đổi trở lại kiểu dữ liệu ban đầu với sự trợ giúp của phương thức toArray() . Với tất cả các phương pháp và chuyển đổi, điều này thoạt đầu có vẻ khó hiểu. Hãy xem ví dụ về cách sử dụng asList() để làm sáng tỏ mọi thứ.

// Code for adding Java arrays to a program
import java.lang.*;
import java.util.*;
 
class ArrayDemo{
   //Let’s add a new element to an array
   public static Integer[] addX(Integer myArray[], int x) {
       int i;
       //turn array into ArrayList using asList() method
       List arrList = new ArrayList( Arrays.asList(myArray));
 
       // adding a new element to the array
       arrList.add(x);
 
       // Transforming the ArrayList into an array
       myArray = arrList.toArray(myArray);
       return myArray;
   }
   public static void main(String[] args) {
       int i;
       //initial array
       Integer myArray[] = { 0, 1, 2, 45, 7, 5, 17};
 
       //print the initial array out
       System.out.println("Initial Array: "
                          + Arrays.toString(myArray));
 
       //element to be added
       int x = 28;
 
       // call the method to add x in myArray
       myArray = addX(myArray, x);
 
       // print the updated array out
       System.out.println("Array with " + x + " added: "
                          + Arrays.toString(myArray));
   }
}
Đầu ra là:
Mảng ban đầu: [0, 1, 2, 45, 7, 5, 17] Mảng có thêm 28: [0, 1, 2, 45, 7, 5, 17, 28]
Như vậy là trong chương trình chúng ta đã tạo thành công một mảng myArray gồm 7 giá trị, điền vào và in ra. Sau đó, chúng tôi quyết định rằng mười giá trị là không đủ đối với chúng tôi. Chà, chúng ta đã chuyển đổi myArray thành ArrayList arrList bằng phương thức Arrays.asList . Đây là 28, phần tử được thêm vào. Chúng tôi đã thêm nó vào ArrayList arrList và sau đó chuyển đổi nó trở lại thành một mảng bằng phương thức toArray() và in ra mảng mới.

2. Tạo mảng mới có dung lượng lớn hơn

Một trong những cách phổ biến nhất để thêm nhiều phần tử hơn vào một mảng là tạo một mảng mới, lớn hơn từ đầu, đặt các phần tử của mảng cũ và thêm phần tử mới. Dưới đây là hướng dẫn từng bước của quy trình:
  • Tạo một mảng mới với dung lượng a+n (a — dung lượng mảng ban đầu, n — số phần tử bạn muốn thêm vào).
  • Thêm tất cả các phần tử của phạm vi dữ liệu trước đó vào phạm vi dữ liệu mới, cũng như các giá trị mới.
  • In mảng kết quả.
Hãy thử tự tạo một mảng như vậy và so sánh mã của bạn với mã trong ví dụ bên dưới:

// Java Program to add an element in an Array

import java.lang.*;
import java.util.*;

class ArrayDemo {
   //Method to add an element x into array myArray
   public static int[] addX(int myArray[], int x) {
       int i;

       // create a new array of a bigger size (+ one element)
       int newArray[] = new int[myArray.length + 1];

       // insert the elements from the old array into the new one
       for (i = 0; i < myArray.length; i++)
           newArray[i] = myArray[i];

       newArray[myArray.length] = x;
       return newArray;
   }

   public static void main(String[] args) {
       int i;

       // initial array of size 10
       int arr[]
               = {0, 1, 2, 45, 7, 5, 17};

       // print the initial array
       System.out.println("Initial Array: " + Arrays.toString(arr));

       // element to be added
       int x = 28;

       // call the addX method to add x in arr
       arr = addX(arr, x);
       // print the updated array
       System.out.println("Array with " + x + " added:" + Arrays.toString(arr));
   }
}
Đầu ra là:
Mảng ban đầu: [0, 1, 2, 45, 7, 5, 17] Mảng có thêm 28: [0, 1, 2, 45, 7, 5, 17, 28]
Chà, cách này để thêm một phần tử mới vào một mảng là cách dễ nhất.

3. Áp dụng System.arrayCopy()

System.arrayCopy() là một phương pháp được sử dụng rộng rãi để phân bổ một mảng lớn hơn tại đích của một mảng nguồn. Nhà phát triển có thể chỉ định trình tự mà anh ta muốn sao chép sang một mảng mới trong dấu ngoặc của phương thức. Để xem phương pháp này hoạt động như thế nào và thử sử dụng nó cho chính bạn, hãy xem và thử chạy ví dụ bên dưới:

import java.util.Arrays;

class ArrayDemo {
   private static Integer[] addElement(Integer[] myArray, int newElement) {
       //we create a new Object here, an array of bigger capacity 
       Integer[] array = new Integer[myArray.length + 1];
       System.arraycopy(myArray, 0, array, 0, myArray.length);
       array[myArray.length] = newElement;
       return array;
   }

   public static void main(String[] args) {
       Integer[] myArray = {20, 21, 3, 4, 5, 88};
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
       myArray = addElement(myArray, 12);
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
   }
}
Đầu ra là:
myArray trước khi thêm phần tử mới: [20, 21, 3, 4, 5, 88] myArray trước khi thêm phần tử mới: [20, 21, 3, 4, 5, 88, 12]
Ở đây, chúng tôi đã tạo một mảng myArray , in nó ra và thêm một phần tử mới bằng cách sử dụng phương thức addElement của chúng tôi , được xây dựng trên System.arrayCopy() .

4. Sử dụng Apache Commons để sao chép mảng

Hãy sử dụng một cách không chuẩn. Cụ thể, thư viện bên thứ ba Apache Commons lang. Nó là một phần của dự án Apache Commons tập trung vào tất cả các khía cạnh của các thành phần Java có thể tái sử dụng. Kiến thức về dự án sẽ không thừa. Ngôn ngữ Apache Commons có một phương thức add() được thiết kế đặc biệt để cho phép mở rộng các mảng, nó tiết kiệm rất nhiều thời gian và công sức cho người viết mã. Cần lưu ý rằng phương thức add() của Apache Commons này dựa trên việc gọi phương thức System.arraycopy() trong trường hợp bạn phải trả lời một bài kiểm tra khó hoặc câu hỏi phỏng vấn. Để thêm các thư viện vào dự án của bạn, hãy truy cập trang web Apache Commons và tải xuống các thư viện. Sau đó, chuyển đến Tệp → Cấu trúc dự án → Thư viện > + và chọn các tệp jar đã tải xuống.

import org.apache.commons.lang3.ArrayUtils;
import java.util.Arrays;

class ArrayDemo {
   private static <T> T[] append(T[] arr, T element) {
       return ArrayUtils.add(arr, element);
   }

   public static void main(String[] args) {
       Integer[] myArray = { 0, 1, 2, 3, 4};
       System.out.println("myArray: " + Arrays.toString(myArray));

       myArray = append(myArray, 5);
       System.out.println("new Array with the number added: " + Arrays.toString(myArray));
   }
}
Đầu ra là:
myArray: [0, 1, 2, 3, 4] Mảng mới với số được thêm vào: [0, 1, 2, 3, 4, 5]

5. Triển khai ArrayCopyOf()

ArrayCopyOf() là một phương pháp nữa để thêm một phần tử mới vào một mảng. Chẳng hạn như Apache Commons lang add() nó gọi nội bộ System.arraycopy() để thực hiện thao tác này. Tuy nhiên, hầu hết các nhà phát triển thích ArrayCopyOf() hơn vì nó cho phép họ giữ cho mã ngắn gọn và dễ đọc. Đây là một ví dụ về việc sử dụng ArrayCopyOf() để thêm các phần tử mới vào một mảng:

import java.util.Arrays;
class ArrayDemo {
   private static <X> X[] addElement(X[] myArray, X element) {
       X[] array = Arrays.copyOf(myArray, myArray.length + 1);
       array[myArray.length] = element;
       return array;
   }
   public static void main(String[] args) {
       Integer[] myArray = {20, 21, 3, 4, 5, 88};
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
       myArray = addElement(myArray, 12);
       System.out.println("myArray before adding a new element: " + Arrays.toString(myArray));
   }
}
Đầu ra là:
myArray trước khi thêm phần tử mới: [20, 21, 3, 4, 5, 88] myArray trước khi thêm phần tử mới: [20, 21, 3, 4, 5, 88, 12]

Phần kết luận

Biết cách thêm các phần tử vào một mảng giúp các nhà phát triển cập nhật mã cũ một cách nhanh chóng mà không làm mất chức năng và khả năng đọc của nó… Hoặc chỉ để vượt qua cuộc phỏng vấn. Vì có nhiều cách khác nhau để thêm các phần tử vào mảng Java, vui lòng chọn phương thức mà bạn cảm thấy thoải mái.