Trong PHP, bạn có thể thêm động các phần tử vào mảng bằng cách sau:
$x = new Array();
$x[] = 1;
$x[] = 2;
Sau đó, $x
sẽ là một mảng như thế này: {1,2}
.
Có cách nào để làm điều gì đó tương tự trong Java không?
Trong PHP, bạn có thể thêm động các phần tử vào mảng bằng cách sau:
$x = new Array();
$x[] = 1;
$x[] = 2;
Sau đó, $x
sẽ là một mảng như thế này: {1,2}
.
Có cách nào để làm điều gì đó tương tự trong Java không?
Câu trả lời:
Nhìn vào java.util.LinkedList hoặc java.util.ArrayList
List<Integer> x = new ArrayList<Integer>();
x.add(1);
x.add(2);
int[]
) chỉ cần sử dụng toArray()
phương thức trên List. Sử dụng đoạn mã trên nhưng sử dụng x.toArray()
để lấy một Mảng nguyên thủy.
ARRAY
các đối tượng Oracle hoặc một số điều tương tự như vậy, tốt hơn hết bạn nên tránh các mảng nguyên thủy.
List
tham chiếu cho phép chúng ta lao ArrayList
vào lề đường bất cứ lúc nào chúng ta muốn. Nếu ai đó phát hành một danh sách tốt hơn, chẳng hạn như SuperDuperAwesomeList
, chúng tôi có thể còn nhiều việc phải làm nếu chúng tôi thực hiện tham chiếu của mình là một ArrayList
. ArrayList có những thứ mà List không có. Nếu chúng ta dựa vào những thứ đó trong mã của mình, việc hoán đổi trở nên khó khăn hơn nhiều.
Mảng trong Java có kích thước cố định, vì vậy bạn không thể "thêm thứ gì đó vào cuối" như cách bạn có thể làm trong PHP.
Một chút tương tự với hành vi PHP là:
int[] addElement(int[] org, int added) {
int[] result = Arrays.copyOf(org, org.length +1);
result[org.length] = added;
return result;
}
Sau đó, bạn có thể viết:
x = new int[0];
x = addElement(x, 1);
x = addElement(x, 2);
System.out.println(Arrays.toString(x));
Nhưng lược đồ này không hiệu quả một cách khủng khiếp đối với các mảng lớn hơn , vì nó tạo ra một bản sao của toàn bộ mảng mỗi lần. (Và trên thực tế nó không hoàn toàn tương đương với PHP, vì các mảng cũ của bạn vẫn giữ nguyên).
Các mảng PHP trên thực tế khá giống với một Java HashMap với một "khóa tối đa" được thêm vào, vì vậy nó sẽ biết khóa nào sẽ sử dụng tiếp theo và một thứ tự lặp lạ (và mối quan hệ tương đương kỳ lạ giữa các khóa Số nguyên và một số Chuỗi). Nhưng đối với các bộ sưu tập được lập chỉ mục đơn giản, tốt hơn nên sử dụng Danh sách bằng Java, giống như những người trả lời khác đã đề xuất.
Nếu bạn muốn tránh sử dụng List
do chi phí phải gói mọi int trong một Số nguyên, hãy xem xét sử dụng việc thực hiện lại các bộ sưu tập cho các kiểu nguyên thủy, sử dụng mảng bên trong, nhưng sẽ không sao chép mọi thay đổi, chỉ khi mảng bên trong đầy ( giống như ArrayList). (Một ví dụ nhanh chóng được googled là lớp IntList này .)
Ổi chứa các phương pháp tạo giấy gói như vậy trong Ints.asList
, Longs.asList
vv
ArrayList
- ngoại trừ việc thay vì thay đổi kích thước trên mỗi lần bổ sung, khi hết chỗ, nó tăng gấp đôi kích thước để không phải thay đổi kích thước gần như thường xuyên.
org
ngắn hơn result
.
Apache Commons có triển khai ArrayUtils để thêm một phần tử vào cuối mảng mới:
/** Copies the given array and adds the given element at the end of the new array. */
public static <T> T[] add(T[] array, T element)
Tôi đã thấy câu hỏi này rất thường xuyên trên web và theo ý kiến của tôi, nhiều người có uy tín cao đã không trả lời những câu hỏi này một cách chính xác. Vì vậy, tôi xin bày tỏ câu trả lời của riêng tôi ở đây.
Trước tiên, chúng ta nên xem xét có sự khác biệt giữa array
và arraylist
.
Câu hỏi đặt ra yêu cầu bổ sung thêm một yếu tố để một mảng , và không ArrayList
Câu trả lời khá đơn giản. Nó có thể được thực hiện trong 3 bước.
Đây là hình ảnh đơn giản của nó
Và cuối cùng đây là đoạn mã:
Bước 1:
public List<String> convertArrayToList(String[] array){
List<String> stringList = new ArrayList<String>(Arrays.asList(array));
return stringList;
}
Bước 2:
public List<String> addToList(String element,List<String> list){
list.add(element);
return list;
}
Bước 3:
public String[] convertListToArray(List<String> list){
String[] ins = (String[])list.toArray(new String[list.size()]);
return ins;
}
Bước 4
public String[] addNewItemToArray(String element,String [] array){
List<String> list = convertArrayToList(array);
list= addToList(element,list);
return convertListToArray(list);
}
Bạn có thể sử dụng một ArrayList
và sau đó sử dụng toArray()
phương pháp. Nhưng tùy thuộc vào những gì bạn đang làm, bạn thậm chí có thể không cần một mảng nào cả. Xem xét xem Lists
có nhiều hơn những gì bạn muốn.
Bạn có thể muốn sử dụng ArrayList cho việc này - cho một mảng có kích thước động như cấu trúc.
Bạn có thể thêm động các phần tử vào một mảng bằng cách sử dụng Khung Bộ sưu tập trong JAVA. collection Framework không hoạt động trên các kiểu dữ liệu nguyên thủy.
Khung Bộ sưu tập này sẽ có sẵn trong gói "java.util. *"
Ví dụ: nếu bạn sử dụng ArrayList,
Tạo một đối tượng cho nó và sau đó thêm số phần tử (bất kỳ loại nào như Chuỗi, Số nguyên ... vv)
ArrayList a = new ArrayList();
a.add("suman");
a.add(new Integer(3));
a.add("gurram");
Bây giờ bạn đã được thêm 3 phần tử vào một mảng.
nếu bạn muốn loại bỏ bất kỳ yếu tố nào đã thêm
a.remove("suman");
một lần nữa nếu bạn muốn thêm bất kỳ phần tử nào
a.add("Gurram");
Vì vậy, kích thước mảng đang tăng / giảm động ..
Sử dụng ArrayList hoặc sắp xếp các mảng để tự động tăng kích thước mảng.
giữ số lượng bạn đang ở đâu trong mảng nguyên thủy
class recordStuff extends Thread
{
double[] aListOfDoubles;
int i = 0;
void run()
{
double newData;
newData = getNewData(); // gets data from somewhere
aListofDoubles[i] = newData; // adds it to the primitive array of doubles
i++ // increments the counter for the next pass
System.out.println("mode: " + doStuff());
}
void doStuff()
{
// Calculate the mode of the double[] array
for (int i = 0; i < aListOfDoubles.length; i++)
{
int count = 0;
for (int j = 0; j < aListOfDoubles.length; j++)
{
if (a[j] == a[i]) count++;
}
if (count > maxCount)
{
maxCount = count;
maxValue = aListOfDoubles[i];
}
}
return maxValue;
}
}
Đây là một cách đơn giản để thêm vào một mảng trong java. Tôi đã sử dụng một mảng thứ hai để lưu trữ mảng ban đầu của mình, sau đó thêm một phần tử nữa vào nó. Sau đó, tôi chuyển mảng đó trở lại mảng ban đầu.
int [] test = {12,22,33};
int [] test2= new int[test.length+1];
int m=5;int mz=0;
for ( int test3: test)
{
test2[mz]=test3; mz++;
}
test2[mz++]=m;
test=test2;
for ( int test3: test)
{
System.out.println(test3);
}
Trong Java kích thước của mảng là cố định, nhưng bạn có thể thêm động các phần tử vào một mảng có kích thước cố định bằng cách sử dụng chỉ mục của nó và vòng lặp for. Vui lòng tìm ví dụ dưới đây.
package simplejava;
import java.util.Arrays;
/**
*
* @author sashant
*/
public class SimpleJava {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try{
String[] transactions;
transactions = new String[10];
for(int i = 0; i < transactions.length; i++){
transactions[i] = "transaction - "+Integer.toString(i);
}
System.out.println(Arrays.toString(transactions));
}catch(Exception exc){
System.out.println(exc.getMessage());
System.out.println(Arrays.toString(exc.getStackTrace()));
}
}
}