2013-04-09 23 views
30

Chcesz dodać lub dołączyć elementy do istniejącej macierzydodać element do int [] tablicy w java

int[] series = {4,2}; 

Teraz chcę zaktualizować szereg dynamicznie z nowymi wartościami wyślę ..

jak gdyby I wysłać 3 Update jako int[] series = {4,2,3};

ponownie, jeśli mogę wysłać 4 Update jako int[] series = {4,2,3,4};

ponownie, jeśli przesłać 1 Update jako int[] series = {4,2,3,4,1};, czyli

Jak to zrobić ????

wygenerować liczbę całkowitą co 5 minut w niektórych innych funkcji, a chcesz wysłać do aktualizacji tablicy int[] series ..

+5

jeśli ilość elementów w serii nie jest ograniczony naprawdę powinieneś rozważyć zmianę zaprojektować użyć bardziej odpowiednią strukturę danych, takich jak [Wektor] (http://docs.oracle.com/javase/6/ docs/api/java/util/Vector.html) lub [List] (http://docs.oracle.com/javase/6/docs/api/java/util/List.html) – Oren

Odpowiedz

52

Długość tablicy jest niezmienna w języku Java. Oznacza to, że nie możesz zmienić rozmiaru tablicy po jej utworzeniu. Jeśli zainicjalizujesz go 2 elementami, jego długość wynosi 2. Możesz jednak użyć innej kolekcji.

List<Integer> myList = new ArrayList<Integer>(); 
myList.add(5); 
myList.add(7); 

I z metody otoki

public void addMember(Integer x) { 
    myList.add(x); 
}; 
+0

Jak można posortować tę listę? w celu uzyskania najwyższej wartości? – Shaonline

+0

@Shaonline W porządku rosnącym, Collections.sort (list). W porządku malejącym, Collections.sort (list, Collections.reverseOrder()); – compski

11

Jeśli generowania liczbę całkowitą co 5 minut, lepiej użyć kolekcji. Zawsze można uzyskać z niego tablicę, jeśli jest to wymagane w kodzie.

Else zdefiniować tablicę wystarczająco duży, aby obsłużyć wszystkie swoje wartości w czasie wykonywania (nie jest to korzystne, choć.)

3

Wielkość tablicy nie mogą być zmieniane. Jeśli chcesz większej macierzy, musisz utworzyć nową tablicę.

Jednak lepszym rozwiązaniem byłoby użycie listy (Array), która może rozwijać się w miarę potrzeb. Metoda ArrayList.toArray (T [] a) zwraca tablicę, jeśli musisz użyć tablicy w swojej aplikacji.

40

spróbować tej

public static void main(String[] args) { 
    int[] series = {4,2}; 
    series = addElement(series, 3); 
    series = addElement(series, 1); 
} 

static int[] addElement(int[] a, int e) { 
    a = Arrays.copyOf(a, a.length + 1); 
    a[a.length - 1] = e; 
    return a; 
} 
+0

to wygląda nieefektywnie, prawda? @Jason odpowiedź wydaje mi się lepsza –

+0

@AlwinKesler Jestem po prostu ciekawy tutaj, w jaki sposób ta odpowiedź jest mniej wydajna niż pętla @ Jason? 'Array.copyOf()' w zasadzie wywołuje 'System.arraycopy()', która używa natywnego kodu do skopiowania tablicy. Sam tego nie przetestowałem, ale wyobrażam sobie, że będzie szybciej. –

+0

Tworzy nową tablicę w każdym żądaniu do 'addElement'. To sprawia, że ​​myślę o problemie ** log (N + 1) **. Jason używa początkowej pojemności i dodaje elementy do indeksów, które moim zdaniem są lepsze. Taka jest moja opinia, wciąż nie testowałem tego. –

2
import java.util.Arrays; 

public class NumberArray {  

    public static void main(String []args){ 
     int[] series = {4,2}; 
     int[] newSeries = putNumberInSeries(1,series); 
     System.out.println(series==newSeries);//return false. you won't get the same int[] object. But functionality achieved. 
    } 
    private static int[] putNumberInSeries(int i, int[] series) { 
     int[] localSeries = Arrays.copyOf(series, series.length+1); 
     localSeries[series.length] = i; 
     System.out.println(localSeries); 
     return localSeries; 
    } 
} 
1

podobny do Evgeniy:

int[] series = {4,2}; 

    add_element(3); 
    add_element(4); 
    add_element(1); 


public void add_element(int element){ 
    series = Arrays.copyOf(series, series.length +1); 
    series[series.length - 1] = element; 
} 
7

You Będziesz musiał utworzyć nową tablicę, jeśli chcesz dodać indeks.

Spróbuj tego:

public static void main(String[] args) { 
    int[] series = new int[0]; 
    int x = 5; 


    series = addInt(series, x); 

    //print out the array with commas as delimiters 
    System.out.print("New series: "); 
    for (int i = 0; i < series.length; i++){ 
     if (i == series.length - 1){ 
      System.out.println(series[i]); 
     } 
     else{ 
      System.out.print(series[i] + ", "); 
     } 
    } 
} 

// tu utworzyć metodę

public static int[] addInt(int [] series, int newInt){ 
    //create a new array with extra index 
    int[] newSeries = new int[series.length + 1]; 

    //copy the integers from series to newSeries  
    for (int i = 0; i < series.length; i++){ 
     newSeries[i] = series[i]; 
    } 
//add the new integer to the last index  
    newSeries[newSeries.length - 1] = newInt; 



    return newSeries; 

    } 
+1

Możesz dodać pętlę w głównym, aby za każdym razem generować nowy indeks. –

4

Podobnie jak inni sugerują, jesteś lepiej wyłączyć za pomocą kolekcji. Jeśli jednak z jakiegoś powodu musi trzymać tablicę następnie Apache Commons ArrayUtils może pomóc:

int[] series = {4,2}; 
series = ArrayUtils.add(series, 3); // series is now {4,2,3} 
series = ArrayUtils.add(series, 4); // series is now {4,2,3,4}; 

Należy zauważyć, że metoda add tworzy nową tablicę, kopie danej tablicy i dodaje nowy element na końcu, które mogą mieć wpływ na wydajność.

2
public int[] return_Array() { 

int[] a =new int[10]; 
int b = 25; 
for(int i=0; i<10; i++) {    
    a[i] = b * i; 
    } 
return a; 

} 
+2

Tutaj chcę tablicy 10 wartości, które są wielokrotności 25. Ta metoda działa dla podobnych wymagań. –

1

int [] oldArray = {1,2,3,4,5};

//new value 
    int newValue = 10; 

    //define the new array 
    int[] newArray = new int[oldArray.length + 1]; 

    //copy values into new array 
    for(int i=0;i < oldArray.length;i++) 
     newArray[i] = oldArray[i]; 
    //another solution is to use 
    //System.arraycopy(oldArray, 0, newArray, 0, oldArray.length); 

    //add new value to the new array 
    newArray[newArray.length-1] = newValue; 

    //copy the address to the old reference 
    //the old array values will be deleted by the Garbage Collector 
    oldArray = newArray; 
+1

Czy mógłbyś jeszcze bardziej rozwinąć swoją odpowiedź, dodając nieco więcej opisu dostarczonego rozwiązania? – abarisone

+0

Jest również bardzo przydatny do dodawania elementów w floa [] również –

2

Urządzenie ... może być używane tylko w JDK 1.5 lub nowszym. Jeśli używasz JDK 4 lub niższy, należy użyć tego kodu:”

public static int[] addElement(int[] original, int newelement) { 
    int[] nEw = new int[original.length + 1]; 
    System.arraycopy(original, 0, nEw, 0, original.length); 
    nEw[original.length] = newelement; 
} 

inaczej (JDK 5 lub wyższej):

public static int[] addElement(int[] original, int... elements) { // This can add multiple elements at once; addElement(int[], int) will still work though. 
    int[] nEw = new int[original.length + elements.length]; 
    System.arraycopy(original, 0, nEw, 0, original.length); 
    System.arraycopy(elements, 0, nEw, original.length, elements.length); 
    return nEw; 
} 

Oczywiście, jak wiele już wspomniano powyżej, można użyć Collection lub ArrayList, który umożliwia korzystanie z metody .add().

2
class AddElement { 
    public static void main(String s[]) { 
     int arr[] ={2,3}; 
     int add[] = new int[arr.length+1]; 
     for(int i=0;i<add.length;i++){ 
     if(i==add.length-1){ 
      add[i]=4; 
     }else{ 
      add[i]=arr[i]; 
     } 
     System.out.println(add[i]); 
     } 
    } 
} 
1

Działa to dla mnie:

int[] list = new int[maximum]; 
for (int i = 0; i < maximum; i++{ 
    list[i] = put_input_here; 
} 

ten sposób, to proste, ale skuteczne.

4

Możesz również spróbować.

public static int[] addOneIntToArray(int[] initialArray , int newValue) { 

    int[] newArray = new int[initialArray.length + 1]; 
    for (int index = 0; index < initialArray.length; index++) { 
     newArray[index] = initialArray[index]; 
    } 

    newArray[newArray.length - 1] = newValue; 
    return newArray; 
}