Tôi đã tự hỏi làm thế nào để khởi tạo một mảng số nguyên để kích thước và giá trị của nó thay đổi trong quá trình thực thi chương trình của tôi, có gợi ý nào không?
Tôi đã tự hỏi làm thế nào để khởi tạo một mảng số nguyên để kích thước và giá trị của nó thay đổi trong quá trình thực thi chương trình của tôi, có gợi ý nào không?
Câu trả lời:
Có: sử dụng ArrayList .
Trong Java, mảng "bình thường" có kích thước cố định. Bạn phải cung cấp cho họ một kích thước và không thể mở rộng hoặc thu hẹp chúng. Để thay đổi kích thước, bạn phải tạo một mảng mới và sao chép dữ liệu bạn muốn - điều này không hiệu quả và gây khó khăn cho bạn.
May mắn thay, có tất cả các loại lớp tích hợp thực hiện các cấu trúc dữ liệu chung và các công cụ hữu ích khác. Bạn sẽ muốn kiểm tra API Java 6 để biết danh sách đầy đủ của chúng.
Một lưu ý: ArrayList chỉ có thể chứa các đối tượng (ví dụ: Số nguyên), không chứa các đối tượng nguyên thủy (ví dụ: int). Trong nhiều trường hợp NHẤT, autoboxing / autounboxing sẽ âm thầm giải quyết việc này cho bạn, nhưng bạn có thể gặp một số hành vi kỳ lạ tùy thuộc vào việc bạn đang làm.
size
khi chương trình tiếp tục; nó nhận được bất kỳ kích thước nào xảy ra size
khi dòng đó được thực thi.
null
ở cuối. Bất kỳ ý tưởng tại sao?
Mảng trong Java có kích thước cố định. Những gì bạn cần là ArrayList, một trong số các Bộ sưu tập cực kỳ có giá trị có sẵn trong Java.
Thay vì
Integer[] ints = new Integer[x]
bạn sử dụng
List<Integer> ints = new ArrayList<Integer>();
Sau đó, để thay đổi danh sách bạn sử dụng ints.add(y)
và ints.remove(z)
trong số nhiều phương pháp tiện dụng khác, bạn có thể tìm thấy trong Javadocs thích hợp.
Tôi thực sự khuyên bạn nên nghiên cứu các lớp Bộ sưu tập có sẵn trong Java vì chúng rất mạnh và cung cấp cho bạn nhiều chức năng tích hợp mà người mới sử dụng Java có xu hướng cố gắng tự viết lại một cách không cần thiết.
List<Integer>
thay vì ArrayList<Integer>
?
Mảng có kích thước cố định sau khi được khởi tạo. Bạn có thể sử dụng một Danh sách để thay thế.
Autoboxing làm cho một Danh sách có thể sử dụng được tương tự như một mảng, bạn có thể chỉ cần đặt các giá trị int vào đó:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Tôi không đồng ý với câu trả lời trước gợi ý ArrayList
, vì ArrayList
là không một mảng động nhưng một danh sách được hỗ trợ bởi một mảng. Sự khác biệt là bạn không thể làm như sau:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
Nó sẽ cung cấp cho bạn một IndexOutOfBoundsException vì chưa có phần tử nào ở vị trí này mặc dù mảng hỗ trợ sẽ cho phép bổ sung như vậy. Vì vậy, bạn cần sử dụng triển khai Mảng có thể mở rộng tùy chỉnh như được đề xuất bởi @ randy-lance
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
Nguồn: Cách làm mảng động
Bạn nên sử dụng Danh sách để đối phó với kích thước quy mô nhỏ.
Nếu bạn có một số lượng lớn, ĐỪNG BAO GIỜ sử dụng Danh sách và hộp tự động,
Danh sách <Số nguyên> danh sách
Đối với mỗi số nguyên, một Số nguyên mới được tạo tự động. Bạn sẽ thấy nó chậm dần khi kích thước của danh sách tăng lên. Các số nguyên này là các đối tượng không cần thiết. Trong trường hợp này, sử dụng kích thước ước tính sẽ tốt hơn,
int[] array = new int[ESTIMATED_SIZE];
Làm thế nào về việc sử dụng một List
thay thế? Ví dụ,ArrayList<integer>
Bạn không thể thay đổi kích thước của một mảng. Tuy nhiên, bạn có thể tạo một mảng mới với kích thước phù hợp và sao chép dữ liệu từ mảng cũ sang mảng mới.
Nhưng lựa chọn tốt nhất của bạn là sử dụng IntList từ jacarta commons. ( đây )
Nó hoạt động giống như một Danh sách nhưng chiếm ít không gian hơn và hiệu quả hơn thế, bởi vì nó lưu trữ int thay vì lưu trữ các đối tượng wrapper trên int (đó là lớp Integer).
Tôi đã trả lời câu hỏi này. Đây là liên kết Cách sử dụng Mảng động Java và đây là liên kết cho câu hỏi của tôi mà tôi đã trả lời Mảng động Java
int[] array = new int[size];
size
là một biến, nhưng chiều dài của một mảng phải được cố định, tôi phải @Lord Torgamus?