Cred că's o întrebare destul de simplă, dar nu pot't dau seama cum de a face acest lucru în mod corespunzător.
Am'am primit un gol arraylist:
ArrayList<object> list = new ArrayList<object>();
Am'am unele obiecte vreau să adaug și fiecare obiect trebuie să fie la o anumită poziție. Este necesar, totuși, că ele pot fi adăugate la fiecare comanda. Când am încercat acest lucru, nu't de lucru și nu iau IndexOutOfBoundsException
:
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
Ceea ce am încercat și completarea `ArrayList " cu "null "" și apoi face cele de mai sus. Acesta funcționează, dar cred că's un oribil soluție. Există un alt mod de a face acest lucru?
Poti face astfel:
list.add(1, object1)
list.add(2, object3)
list.add(2, object2)
După ce adăugați object2 la poziția 2, se va muta object3 în poziția 3.
Dacă doriți object3 să fie la position3 tot timpul am'd sugerez să utilizați un HashMap cu poziție cheie și obiect ca o valoare.
Puteți utiliza Serie de obiecte și de a converti la ArrayList-
Object[] array= new Object[10];
array[0]="1";
array[3]= "3";
array[2]="2";
array[7]="7";
List<Object> list= Arrays.asList(array);
ArrayList va fi- [1, null, 2, 3, null, null, null, 7, null, null]
Dacă asta's cazul, atunci de ce nu't vă luați în considerare utilizarea o varietate de normală, inițializa capacitatea și pune obiecte la index vrei.
Object[] list = new Object[10];
list[0] = object1;
list[2] = object3;
list[1] = object2;
Ai putea înlocui, de asemenea, ArrayList pentru a introduce valori nule între dimensiunea și elementul pe care doriți să o adăugați.
import java.util.ArrayList;
public class ArrayListAnySize<E> extends ArrayList<E>{
@Override
public void add(int index, E element){
if(index >= 0 && index <= size()){
super.add(index, element);
return;
}
int insertNulls = index - size();
for(int i = 0; i < insertNulls; i++){
super.add(null);
}
super.add(element);
}
}
Apoi, puteți adăuga în orice moment în ArrayList. De exemplu, această metodă principală:
public static void main(String[] args){
ArrayListAnySize<String> a = new ArrayListAnySize<>();
a.add("zero");
a.add("one");
a.add("two");
a.add(5,"five");
for(int i = 0; i < a.size(); i++){
System.out.println(i+": "+a.get(i));
}
}
randamentele acest rezultat de la consola:
0: zero
1: o
2: două
3: null
4: null
5: cinci
Vreau să vă atrag atenția la `ArrayList.adaugă documentația, care spune că-l aruncă IndexOutOfBoundsException
- în cazul în care indicele este în afara intervalului (index < 0 || index > dimensiune()
)
Verificați dimensiunea()din lista dumneavoastră înainte de a apela lista.adaugă(1, object1)
Cat despre acest mic in timp ce bucla ca o soluție?
private ArrayList<Object> list = new ArrayList<Object>();
private void addObject(int i, Object object) {
while(list.size() < i) {
list.add(list.size(), null);
}
list.add(i, object);
}
....
addObject(1, object1)
addObject(3, object3)
addObject(2, object2)
@Maethortje
The problem here is java creates an empty list when you called new ArrayList and
în timp ce încerca pentru a adăuga un element la poziția specificată ai IndexOutOfBound , deci lista ar trebui să aibă unele elemente de la poziția lor.
Vă rugăm să încercați următoarele
/*
Add an element to specified index of Java ArrayList Example
This Java Example shows how to add an element at specified index of java
ArrayList object using add method.
*/
import java.util.ArrayList;
public class AddElementToSpecifiedIndexArrayListExample {
public static void main(String[] args) {
//create an ArrayList object
ArrayList arrayList = new ArrayList();
//Add elements to Arraylist
arrayList.add("1");
arrayList.add("2");
arrayList.add("3");
/*
To add an element at the specified index of ArrayList use
void add(int index, Object obj) method.
This method inserts the specified element at the specified index in the
ArrayList.
*/
arrayList.add(1,"INSERTED ELEMENT");
/*
Please note that add method DOES NOT overwrites the element previously
at the specified index in the list. It shifts the elements to right side
and increasing the list size by 1.
*/
System.out.println("ArrayList contains...");
//display elements of ArrayList
for(int index=0; index < arrayList.size(); index++)
System.out.println(arrayList.get(index));
}
}
/*
Output would be
ArrayList contains...
1
INSERTED ELEMENT
2
3
*/
Cred că soluția la medopal este ceea ce cauți pentru.
Dar doar o altă soluție alternativă este de a utiliza un HashMap<număr Întreg, Obiect> și de a folosi tasta (număr Întreg) pentru a stoca poziții.
În acest fel ai castigat't nevoie pentru a popula cu null-uri etc inițial, rămânem doar poziția și obiect de pe hartă ca te duci de-a lungul. Puteți scrie câteva rânduri la sfârșitul anului să-l convertească la o Listă, dacă ai nevoie de asta.
Să presupunem că doriți să adăugați un element la o poziție, atunci lista dimensiune trebuie să fie mai mult decât poziția.
adaugă(2, punctul)`: acest mijloc de sintaxă, muta vechi element în poziția 2 cu următorul index și adăuga elementul la locul 2.
Dacă nu există nici un element în poziția 2, atunci acest lucru nu va funcționa, L'll arunca o excepție.
Asta înseamnă că dacă vrei să **** adauga ceva în poziția 2,`
ta dimensiunea listei trebuie să fie de cel puțin(2 + 1) =3,
astfel de articole sunt disponibile la 0,1,2 Poziție.
în acest fel se asigură că poziția 2 este accesat în condiții de siguranță și nu ar fi nici o excepție.
Dacă utilizați Android aroma de Java, s-ar putea să vă sugerez să folosiți un SparseArray. L's-o mai eficient memoria de cartografiere de numere întregi cu obiecte și mai ușor pentru a itera peste o Hartă
Cam târziu, dar să sperăm că încă mai poate fi util pentru cineva.
2 pași pentru adăugarea de elemente la o anumită poziție într-un ArrayList`
list = new ArrayList();//Pornim ArrayList pentru (Integer i = 0; i < mItems.size(); i++) { lista.adaugă(i, null); //"Adăugați" toate pozițiile la null } // "Set" Elemente lista.set(poziție, SomeObject);
În acest fel nu't au redundante elemente în ArrayList` de exemplu, dacă ai fost pentru a adăuga elemente, cum ar fi,
list = new ArrayList(mItems.size());
list.add(position, SomeObject);
Acest lucru ar nu suprascrie elementele existente în poziție pur și simplu, schimbarea celor existente la dreapta de un - astfel încât să aibă un ArrayList cu de două ori mai multe indicies.