2013-09-02 10 views
6

図のように、一度メソッドを実行すると、古いアイテムを削除して、次回の計算の準備をしたいのですが、 arraylist指示されたインデックスから始まる、キューのように、FIFOアルゴリズムに従う? q1arraylistの要素を指定されたインデックスから削除する方法

+0

@Katona :)私は行きますそれを読んで、希望は解決策を見つけることができます – atom2ueki

+0

私は短い答えを作ることもできました – Katona

答えて

11

あなたはList#subList(int, int)を使用することができます。

List<Integer> list = ... 
list = list.subList(10, list.size()); // creates a new list from the old starting from the 10th element 

や、subListは、すべての変更が元のリストに影響を与える上でビューを作成するので、これはさらに良いことがあります

List<Integer> list = ... 
list.subList(0, 10).clear(); // clears the first 10 elements of list 
+0

私が "purchase =(ArrayList )purchase.subList(index、purchase.size());"を使用すると、私に例外エラーが発生しました..java.lang.ClassCastException:java.util.RandomAccessSubListはjava.util.ArrayListにキャストできません – atom2ueki

+0

論理は正しいですが、ちょうどエラーが発生しました – atom2ueki

+0

@ atom2ueki 'ArrayList'を型として使用しません私の答えで 'list'で行ったように' List'を使用してください。 – Katona

1

これはremove()メソッドを使用してください。

は、あなたが20からArrayListの30にインデックスを持つ要素を削除したいとしましょう:

ArrayList<String> list = ... 
for (int i = 0; i < 10; i++) { // 30 - 20 = 10 
    list.remove(20); 
} 

インデックス20の最初の要素は要素にインデックス20から21移動を削除されたら。したがって、次の10個の要素を削除するには、インデックス20の要素を10回削除する必要があります。

+0

あなたの方法は20番目の要素を削除するようです – atom2ueki

+0

文章を読んだことがありますか?配列リストには「穴」はありません。インデックス20の要素を削除すると、次の要素がこのインデックスに移動します。 – micha

+0

30から20に逆戻りすると、理解しがたくなると思います。そして、 'list.remove(i)'を使用してください。 – mike

0

高性能アプリケーションを作成していないので、多くのセマンティクスをインデックス変数に格納するのは悪いスタイルです。

より良いアプローチは、マップの使用です。

E.g。 Map<Item, Integer> itemStockおよびMap<Item, Double> prices。その後、削除操作にも問題はありません。

+0

を削除するだけですが、マップを使用している場合は、各マップの識別子が必要ですが、ここではリストと同じですか?申し訳ありませんが、私はあなたが意味するものを完全に得ていません – atom2ueki

+1

マップはインデックスで動作しない、彼らはキーで動作します。キーはオブジェクトなので、OOPで行うことになるので、整数が単なる数字以外の意味を持つコードを維持するよりも、識別子でコードを維持する方が簡単です。 'Item'クラスかsthを書くべきです。それをマップのキーとして使用します。 – mike

関連する問題