Saya pikir itu pertanyaan yang cukup sederhana, tetapi saya tidak tahu bagaimana melakukan ini dengan benar.
Saya punya daftar array kosong:
ArrayList<object> list = new ArrayList<object>();
Saya punya beberapa objek yang ingin saya tambahkan dan setiap objek harus berada pada posisi tertentu. Namun perlu bahwa mereka dapat ditambahkan dalam setiap urutan yang mungkin. Ketika saya mencoba ini, itu tidak berhasil dan saya mendapatkan IndexOutOfBoundsException
:
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
Apa yang saya coba adalah mengisi ArrayList
dengan null
dan kemudian melakukan hal di atas. Itu bekerja, tapi saya pikir itu solusi yang mengerikan. Apakah ada cara lain untuk melakukan ini?
Jawaban:
Anda dapat melakukannya seperti ini:
Setelah Anda menambahkan object2 ke posisi 2, itu akan memindahkan object3 ke posisi 3.
Jika Anda ingin object3 berada di position3 sepanjang waktu, saya sarankan Anda menggunakan HashMap dengan posisi sebagai kunci dan objek sebagai nilai.
sumber
Anda dapat menggunakan Array objek dan mengubahnya ke ArrayList-
ArrayList akan menjadi [1, null, 2, 3, null, null, null, 7, null, null]
sumber
Jika itu masalahnya maka mengapa Anda tidak mempertimbangkan menggunakan Array biasa, menginisialisasi kapasitas dan meletakkan objek pada indeks yang Anda inginkan.
sumber
Anda juga bisa mengesampingkan ArrayList untuk menyisipkan nol di antara ukuran Anda dan elemen yang ingin Anda tambahkan.
Kemudian Anda dapat menambahkan kapan saja di ArrayList. Sebagai contoh, metode utama ini:
menghasilkan hasil ini dari konsol:
0: nol
1 satu
2: dua
3: nol
4: nol
5: lima
sumber
Saya menarik perhatian Anda ke
ArrayList.add
dokumentasi , yang mengatakan itu melemparIndexOutOfBoundsException
- jika indeks berada di luar jangkauan (index < 0 || index > size()
)Periksa
size()
daftar Anda sebelum Anda meneleponlist.add(1, object1)
sumber
list.add("element");
Anda perlu mengisi indeks kosong dengan nol.
sumber
ketika mencoba menambahkan elemen pada posisi yang ditentukan Anda mendapat IndexOutOfBound, sehingga daftar harus memiliki beberapa elemen di posisi mereka.
Silakan coba ikuti
sumber
Bagaimana dengan
while
lingkaran kecil ini sebagai solusi?sumber
Ini adalah solusi yang mungkin:
sumber
Saya pikir solusi dari medopal adalah apa yang Anda cari.
Tetapi hanya solusi alternatif lain adalah dengan menggunakan HashMap dan menggunakan kunci (Integer) untuk menyimpan posisi.
Dengan cara ini Anda tidak perlu mengisinya dengan nulls dll awalnya, cukup tempel posisi dan objek di peta saat Anda melanjutkan. Anda dapat menulis beberapa baris di akhir untuk mengubahnya menjadi Daftar jika Anda membutuhkannya.
sumber
Misalkan Anda ingin menambahkan item pada suatu posisi, maka ukuran daftar harus lebih dari posisi itu.
add(2, item)
: sintaks ini berarti, pindahkan item lama di posisi 2 ke indeks berikutnya dan tambahkan item di posisi 2.Jika tidak ada item di posisi 2, maka ini tidak akan berfungsi, Ini akan melempar pengecualian.
Itu berarti jika Anda ingin menambahkan sesuatu
position 2,
ukuran daftar Anda harus setidaknya
(2 + 1) =3,
sehingga barang tersedia di0,1,2 Position.
dengan cara itu dipastikan bahwa posisi 2 diakses dengan aman dan tidak akan ada pengecualian.
sumber
Jika Anda menggunakan Android Java, mungkin saya sarankan menggunakan SparseArray . Ini adalah pemetaan bilangan bulat ke objek yang lebih efisien dan lebih mudah untuk diulang daripada Peta
sumber
Agak telat tapi semoga tetap bisa bermanfaat bagi seseorang.
2 langkah untuk menambahkan item ke posisi tertentu di sebuah
ArrayList
add
null item ke indeks spesifik dalamArrayList
Maka
set
posisi seperti dan ketika diperlukan.Dengan cara ini Anda tidak memiliki item berlebihan di
ArrayList
yaitu jika Anda menambahkan item seperti,Ini tidak akan menimpa item yang ada di posisi semata, menggeser yang sudah ada ke kanan oleh satu - sehingga Anda memiliki ArrayList dengan indeks dua kali lebih banyak.
sumber
Anda harus mengatur daripada menambahkan untuk mengganti nilai yang ada di indeks.
Daftar akan berisi [object1, object2]
sumber