2010-11-28 12 views
3

私が使用している場合:javaのこれら2つのオブジェクト初期化の違いは何ですか?

HashMap<String, Integer> test = new HashMap<String, Integer>(); 

またはIを使用します。

HashMap test = new HashMap(); 

は、私がテスト・オブジェクトに適用することができ、さらに方法上の任意の違いがあります。異なって初期化された場合、test.put()、test.get()など?

test.put("One", new Integer(5)); 
    test.put("Two", new Integer(4)); 
    test.put("Three", new Integer(3)); 

としてそれを表示::私は、テスト対象物に例えばのようなものを置けば

また= tokens.entrySet(設定

セット)。
イテレータik = test.iterator();

は、結果がソートされていない
while(ik.hasNext()){ 
     Map.Entry me = (Map.Entry)ik.next(); 
     System.out.println(me.getKey() + " : " + me.getValue()); 

、restulは次のとおりです。

3:3 ワン:5 2:1

それがどのようなルールに従わない??出力がランダムに表示されるのは正常な動作ですか?

+1

ここでは全く別の質問をします.1つはジェネリック、もう1つは地図です。 –

答えて

7

ハッシュマップキーは文字列でなければならず、値は整数でなければなりません。コンパイラはそれぞれの型チェックを実行します。第2の場合、任意の種類のオブジェクトを使用することができる。

これは、HashMapのエントリがランダムな順序で印刷されることはまったく正常です。順序を保持したい場合は、代わりにLinkedHashMapを使用してください。

2

最初の例では、文字列をキーと整数として値として使用できますが、2番目の例ではマップに何かを置くことができ、コンパイラは型の安全性を得ることができません。

Java Genericsの仕組みについて詳しくは、こちらをご覧ください。

1

はい、HashMapを使用しているときは、「ランダム」反復順序を取得します。予測可能な繰り返し順序を持つMap実装が必要な場合は、LinkedHashMapをチェックしてください。

0

最初のケースでは、keyはStringでなければならず、valueはIntegerでなければなりません。

2番目のケースでは、keyとvalueはanytypeのオブジェクトにすることができます。

HashMapとHashSetは、挿入順序を保証しません。値を挿入する順番にしたい場合は、LinkedHashMapを試してみてください。より明確には以前StackOverflow question here

0

に答えた私は、それ以外のことはあなたが値としてキーと整数としてのみ文字列を追加できるようにコンパイラが必要な場合、その後、あなたはパラメータの種類、 両方を指定する必要があり、使用状況、 に依存だと思います何も制限なく渡す必要がある場合は、2番目のものを使用します。

関連する問題