2017-08-15 9 views
0

無制限の量の定義済みの値を持つArrayListを初期化する方法を知りたいので、任意のインデックスの要素にアクセスしてその値を更新できます。無制限の定義済み値を持つArrayList

例えば、ArrayListのtestArrayListはすべてint0で開始されるだろう、私はすぐに代わりにバインドされた例外のうちを取得する15へのArrayListで第124要素を設定するtestArrayList.set(123, 15)を使用することができます。 testArrayList.get(99999)のようなクエリを実行すると、あらかじめ定義された値0が得られます。

私はArrayListを初期化しようとしていましたが、forループを使って0を追加しましたが、最初のArrayListの大きさを決めなければなりません。私がArrayListを作成した直後に100 0を追加すると、0を追加する前に.get(200)を実行できませんでした。

ArrayListで可能なものはありますか?そうでない場合は、いくつかの代替ソリューションをお勧めしますか?

ありがとうございます。

編集:私がリストを望んでいた理由は、それを順番に反復できるようにしたいということでした。私は単純なカレンダーのようなプログラムを作っています。そこでは、任意の "日付"の "メモ"を追加/取得/変更できますが、特定の期間を与えられたすべての "日付"のメモを印刷することもできます。

+1

あなたが解決しようとしている問題を説明して、この質問をするように促すかもしれません。 –

+0

あらかじめ定義された値が無制限のリストが必要なのはなぜですか? – hamena314

+2

独自のArrayListを実装し、メソッドに要件を追加してください – azro

答えて

1

ArrayList(または任意の種類のList)のように聞こえるのは本当に欲しいです。あなたはMapがほしいと思うように聞こえます。

しかし、あなたがArrayListとしてそれをしたい場合、あなたはそれをサブクラス化しgetset彼らはリストには、インデックスのために十分な大きさであるかどうかをチェックし、そうでない場合は、それがポイントにそれを埋めるようにオーバーライドすることができます。 setため緩く

は、:

@Override 
public E set(int index, E element) { 
    if (this.size() <= index) { 
     this.ensureCapacity(index + 1); 
     for (int n = this.size(); n <= index; ++n) { 
      this.set(n, 0); 
     } 
    } 
    return super.set(index, element); 
} 

しかし、再び、より良い選択かもしれませんMapのように思えます。

4

インデックス番目99999」を埋めるために、あなたは無駄である、最初の99998にインデックス0を移入する必要がありますので、あなたは、ArrayListを作成する必要はありません。

HashMap<Integer,Integer>は、気になるインデックスのみを入力するため、より良いオプションです。

HashMapIntegerのキーは、「希薄なArrayList」のインデックスを小さな配列にマッピングしていると考えることができます。予想される挿入時間とルックアップ時間を一定に保ちながらストレージ要件が削減されます。例えば

Map<Integer,Integer> map = new HashMap<>(); 
int value = map.getOrDefault(99999,0); // this will return 0 if the Map has no value 
             // for the key 99999 
map.put (99999, value + 1); 

EDIT:繰り返し順序のためのあなたの条件を見て、あなたの代わりにHashMap<Integer,Integer>TreeMap<Integer,Integer>使用することができます。このようにしてキーを反復すると、常に数値順になります。

+0

ありがとうございます、私はTreeMapで試してみます。 – gcarol

0

あなたは、まばらに配置された配列をその場で埋める方法を尋ねています。

私の知る限り、Javaの組み込みライブラリにはこのようなことはありません。

オプションスペース:

  • 別のデータ構造を使用し、それが「まばらな」コンテンツのため、より適しています。空のスロットが123ある点は何ですか?あなたは本当の内容のスロットだけを持っていれば...あなたのニーズに合ったマップが得られます。
  • あなたは常に需要
0

にこれらすべての空のスロットを「作成」リストの独自のバージョンを実装することができますカスタムメソッドの背後にあるリストへのアクセスを非表示にします。索引を徹底的にフェッチします。リストに十分な項目がない場合は、デフォルトの項目を目的の索引に達するまでリストに追加します。次のインデックスがサイズ以下の場合は、そのインデックスを取得します。それ以外の繰り返し。

無制限のデフォルト値を持つデフォルト構造はありません(あまり効率的ではありません)。上記のようにリストを隠すことによって、必要なだけ多くのアイテムを(または必要と思って)持てます。

関連する問題