それはかなり単純な質問だと思いますが、これを正しく行う方法を私は理解できません。
空のアレイリストがあります。
ArrayList<object> list = new ArrayList<object>();
追加したいオブジェクトがいくつかありますが、各オブジェクトは特定の位置になければなりません。ただし、可能な順序で追加できることが必要です。これを試すとうまくいきませんし、IndexOutOfBoundsException
が返されます。
list.add(1, object1)
list.add(3, object3)
list.add(2, object2)
私が試したのはArrayList
をnull
で埋めてから上記のようにすることです。それは動作しますが、私はそれが恐ろしい解決策だと思います。これを行う別の方法はありますか?
あなたはこれのようにそれをすることができます:
list.add(1, object1)
list.add(2, object3)
list.add(2, object2)
Object2を位置2に追加すると、object3は位置3に移動します。
Object3を常にposition3にしたい場合は、positionをキーとして、objectを値として持つHashMapを使用することをお勧めします。
あなたはオブジェクトの配列を使用して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は - [1、null、2、3、null、null、null、7、null、null]になります。
その場合は、通常のArrayの使用を検討し、容量を初期化して、目的のインデックスにオブジェクトを配置してください。
Object[] list = new Object[10];
list[0] = object1;
list[2] = object3;
list[1] = object2;
ArrayListをオーバーライドして、サイズと追加する要素の間にnullを挿入することもできます。
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);
}
}
そうすれば、ArrayListのどこにでも追加できます。例えば、このメインメソッドは:
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));
}
}
コンソールからこの結果が得られます。
0:ゼロ
1:1
2:2
3:null
4:null
5時5分
私は ArrayList.add
ドキュメント に注意を向けています。インデックスが範囲外の場合はIndexOutOfBoundsException
がスローされます(index < 0 || index > size()
)
size()
を呼び出す前に、リストのlist.add(1, object1)
を確認してください。
空のインデックスにnullを入力する必要があります。
while (arraylist.size() < position)
{
arraylist.add(null);
}
arraylist.add(position, object);
@Maethortje
The problem here is Java creates an empty list when you called new ArrayList and
指定された位置に要素を追加しようとしている間、あなたはIndexOutOfBoundを得ました、それでリストはそれらの位置にいくつかの要素を持つべきです。
フォローしてみてください
/*
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
*/
解決策として、この小さなwhile
ループはどうですか。
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)
これは可能な解決策です:
list.add(list.size(), new Object());
ある位置にアイテムを追加したいとすると、リストのサイズはその位置より大きくなければなりません。
add(2, item)
:この構文は、位置2の古いアイテムを次のインデックスに移動し、そのアイテムを2番目の位置に追加することを意味します。
2番目の位置に項目がない場合、これは機能しません。それは例外をスローします。
つまり、position 2,
に追加何かを追加したい場合
あなたのリストサイズは少なくとも(2 + 1) =3,
である必要がありますのでアイテムは0,1,2 Position.
で利用可能です
そのようにして、ポジション2が安全にアクセスされ、例外がないことが保証されます。
私はmedopalからの解決策があなたが探しているものであると思います。
しかし、もう1つの解決策は、HashMapを使用し、位置を格納するためにキー(Integer)を使用することです。
こうすれば、最初にnullなどを入力する必要がなくなり、移動するときに位置とオブジェクトをマップに貼り付けるだけで済みます。あなたがそのようにそれをそれを必要とするならば、あなたはそれをリストに変換するために最後に数行を書くことができます。
少し遅くなりますが、うまくいけばまだ誰かに役立つことができます。
ArrayList
name__内の特定の位置にアイテムを追加する2つのステップ
add
name__内の特定の索引に対するArrayList
name__ヌル項目次に、必要に応じてset
name__の位置を指定します。
list = new ArrayList();//Initialise the ArrayList
for (Integer i = 0; i < mItems.size(); i++) {
list.add(i, null); //"Add" all positions to null
}
// "Set" Items
list.set(position, SomeObject);
このように、あなたはArrayList
name__の中に冗長な項目を持っていません。
list = new ArrayList(mItems.size());
list.add(position, SomeObject);
これはその位置にある既存の項目を単に上書きして、既存の項目を1つずつ右にずらすことはないので、ArrayListには2倍の数の標識があります。
あなたがJavaのAndroidフレーバーを使っているなら、私は SparseArray を使うことを提案するかもしれません。これは、マップよりもメモリの効率的な整数のオブジェクトへのマッピングであり、繰り返し処理が簡単です。
あなたはindexで既存の値を置き換えるためにaddの代わりに設定するべきです。
list.add(1, object1)
list.add(2, object3)
list.set(2, object2)
リストには[object1、object2]が含まれます