Saya pikir itu's cukup pertanyaan sederhana, tapi aku bisa't tahu bagaimana untuk melakukannya dengan benar.
I've got kosong arraylist:
ArrayList<object> list = new ArrayList<object>();
I've punya beberapa benda yang saya ingin menambahkan dan setiap objek harus berada pada posisi tertentu. Hal ini diperlukan namun yang mereka dapat ditambahkan pada setiap kemungkinan urutan. Ketika saya mencoba ini, itu doesn't bekerja dan saya mendapatkan IndexOutOfBoundsException
:
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
Apa yang saya telah mencoba mengisi ArrayList
dengan null
dan kemudian melakukan hal di atas. Ini bekerja, tapi saya pikir itu's mengerikan solusi. Apakah ada cara lain untuk melakukan ini?
Anda dapat melakukannya seperti ini:
list.add(1, object1)
list.add(2, object3)
list.add(2, object2)
Setelah anda menambahkan object2 ke posisi 2, ia akan bergerak object3 ke posisi 3.
Jika anda ingin object3 berada di position3 semua waktu saya'd sarankan anda menggunakan HashMap dengan posisi sebagai kunci dan objek sebagai sebuah nilai.
Anda dapat menggunakan Array dari objek dan mengubahnya ke 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 akan- [1, null, 2, 3, null, null, null, 7, null, null]
Jika itu's terjadi maka mengapa don't anda mempertimbangkan untuk menggunakan suatu Susunan yang teratur, menginisialisasi kapasitas dan menempatkan benda-benda di index yang anda inginkan.
Object[] list = new Object[10];
list[0] = object1;
list[2] = object3;
list[1] = object2;
Anda juga bisa menimpa ArrayList untuk menyisipkan nulls antara ukuran dan elemen yang ingin anda tambahkan.
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);
}
}
Maka anda dapat menambahkan pada setiap titik dalam ArrayList. Misalnya, ini metode utama:
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));
}
}
hasil ini hasil dari konsol:
0: nol
1: satu
2: dua
3: null
4: null
5: lima
Aku menarik perhatian anda pada ArrayList.tambahkan
dokumentasi, yang mengatakan itu melempar IndexOutOfBoundsException
- jika indeks berada di luar jangkauan (index < 0 || index > size()
)
Periksa ukuran ()
dari daftar anda sebelum anda menelepon daftar.add(1, object1)
Bagaimana tentang hal ini sedikit sementara
loop sebagai solusi?
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
ketika mencoba untuk menambahkan elemen pada posisi tertentu yang anda punya IndexOutOfBound , jadi daftar harus memiliki beberapa unsur di posisi mereka.
Silakan coba berikut ini
/*
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
*/
Saya pikir solusi dari medopal adalah apa yang anda cari.
Tapi hanya alternatif solusi lain adalah dengan menggunakan HashMap<Integer, Objek> dan menggunakan kunci (Integer) untuk menyimpan posisi.
Dengan cara ini anda tidak't perlu untuk mengisinya dengan nulls dll pada awalnya, hanya menempel posisi dan objek dalam peta sebagai anda pergi bersama. Anda dapat menulis beberapa baris di akhir untuk mengkonversi ke Daftar jika anda membutuhkan itu.
Misalkan anda ingin menambahkan item pada posisi, maka daftar ukuran harus lebih dari satu posisi.
tambahkan(2, item)
: sintaks ini berarti, memindahkan item yang lama di posisi 2 untuk selanjutnya indeks dan menambahkan item pada posisi ke-2.
Jika tidak ada item di posisi ke-2, maka ini tidak akan bekerja, Itu'akan melempar pengecualian.
Itu berarti jika anda ingin tambahkan **** sesuatu di posisi 2,`
anda daftar ukuran harus minimal(2 + 1) =3,
jadi barang-barang yang tersedia di 0,1,2 Posisi.
dengan cara itu dipastikan bahwa posisi 2 diakses dengan aman dan tidak akan ada pengecualian.
Jika anda menggunakan Android rasa Jawa, mungkin saya sarankan menggunakan SparseArray. It's sebuah memori yang lebih efisien pemetaan bilangan bulat untuk benda-benda dan lebih mudah untuk iterate atas dari Peta
Sedikit terlambat, tapi mudah-mudahan masih bisa berguna untuk seseorang.
2 langkah-langkah untuk menambahkan item pada posisi tertentu dalam sebuah ArrayList
add
null barang-barang tertentu indeks dalam sebuah ArrayList
set
posisi sebagai dan bila diperlukan.daftar = new ArrayList();//Menginisialisasi ArrayList untuk (Integer i = 0; i < mItems.size(); i++) { daftar.menambahkan(i, null); //"Tambahkan" semua posisi ke null } // "" Item daftar.set(posisi, SomeObject);
Dengan cara ini anda don't memiliki berlebihan item dalam ArrayList
yaitu jika anda menambahkan item seperti,
list = new ArrayList(mItems.size());
list.add(position, SomeObject);
Ini akan tidak menimpa barang-barang yang ada di posisi semata, pergeseran yang sudah ada ke kanan dengan satu - sehingga anda memiliki ArrayList dengan dua kali lebih banyak indicies.