1

私は基本的に を含む HashTable を持っていArrayList<String>,Booleanます。Hashtable からキーを取得する必要があります。次に、キーである から最初の値を取得する必要がArrayList<String>あります。

私はもう試した :

    Hashtable<ArrayList<String>,Boolean> tableRows = tableRead(); // returns the Hashtable.

    ArrayList<String> IDs = new ArrayList<String>();        

    Iterator it = tableRows.keySet().iterator();
    while (it.hasNext()) {
        IDs.add(it.next().get(0));      
    }

ただし、これによりエラーが発生します。cannot find symbol

[javac]   symbol:   method get(int)
[javac]   location: class Object

機能的なアイデアを提供するために:私は基本的にハッシュテーブルのキーとしてDB行全体を持っています。ID だけを取得する必要があります。

誰かがこれで私を助けることができますか?

4

4 に答える 4

2

raw を宣言したIteratorので、そのメソッドはメソッドを持たないnext()を返します。それはあなたのキーですが、あなたが生であるため(ジェネリック型パラメーターがないため)型付けされています。ObjectgetObjectIterator

Iteratorキーのセットから返されたジェネリックを使用します。

Iterator<ArrayList<String>> it = tableRows.keySet().iterator();

次に、 を呼び出すことができる をit.next()返します。ArrayList<String>get

于 2013-07-09T20:29:09.903 に答える
0

ArrayList<String>a のキーとしてan を使用することMapは、非常に悪い考えです。変更可能なオブジェクトをキーとして使用してはいけません。万が一リストが変更された場合、キーが無効になります。これは設計上の臭いです (そして臭いです)。

別の方法として、 の文字列を連結して不変のキーをArrayList作成するか、 で作成された不変のリストを使用することをお勧めします。列Collections.unmodifiableList()のみを使用するidと、行全体を使用しても意味がありません。キーとして。

いずれにせよ、 as キー使用する必要がある場合ArrayListは、次のコードで問題を解決できます。イテレータを明示的に使用する必要はありません。この場合、拡張forループはキーを反復処理するためのはるかに優れた代替手段です。

for (ArrayList<String> al : tableRows.keySet()) {
    IDs.add(al.get(0));
}
于 2013-07-09T20:31:56.353 に答える