0

次のクエリがあります。これは、以下のハッシュマップ クラスです。

 HashMap map=new HashMap();//HashMap key random order.
         System.out.println("Amit".hashCode());
         map.put("Amit","Java");
         map.put("mAit","J2EE");
         map.put("Saral","J2rrrEE");

コンソールで配列の要素を取得して出力を確認したい場合、コードは次のようになります。

Set s=map.entrySet();
         Iterator itr=s.iterator();
         while(itr.hasNext())
         {
             Map.Entry m=(Map.Entry)itr.next();
             System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode());
          }

必要に応じて map.entry にキャストし、 getkey() および getvalue() と呼ばれるメソッドを持っています。 map.entry についても明確ですが、単純なコアでこれらの組み込み関数を使用せずに配列を取得したいJavaコード、それを達成する方法を教えてください..!

マップの内容を取得するために getkey() や getvalue() などの組み込み関数を使用したくありません。単純な Java コードを使用して、指定されたキーまたはそこにあるすべてのキーの値を取得したいと考えています。私が使用したいコア Java で構築された getkey() と getvalue() の背後にあるロジックである必要があります..!!

単純なJavaプログラム自体でマップの内容を取得する方法はありますか..!!組み込みのコレクション関数を使用せずに..!

4

6 に答える 6

4

探している配列がわかりません。コードに配列がありません。

あなたはジェネリックを使うことによってあなたの人生を単純化するでしょう。マップを次のように宣言します。

HashMap<String, String> map = new HashMap<String, String>();

2番目のスニペットは、拡張されたforループで記述できます。

for (Map.Entry<String, String> m : map.entrySet()) {
    System.out.println(m.getKey()+"\t"+m.getValue()+"\t"+ m.hashCode());
}

タイトルが示すように値のみを取得したい場合:

for (String value : map.values()) {
    System.out.println(value);
}
于 2012-08-05T15:59:06.150 に答える
3

keyset() または values() 関数を使用して、キーのセットまたは値のコレクションを取得できます。

マップのコンテンツを取得するために、getkey() や getvalue() などの組み込み関数を使用したくありません。

求めているのがハッシュマップの内部表現である場合は、そこから離れてください。内部データ構造は、ハッシュマップの内部を抽象化するためのものです。リンクされたハッシュ マップは、通常のハッシュ マップとは異なる方法で表現できます。とにかく内部構造にアクセスしたいのはなぜですか?API 開発者は、これらの表現へのアクセスを許可しません。

絶望的な場合は、ハッシュマップのプライベート メンバー変数をいつでも検索して、リフレクション経由でアクセスできるようにすることができます。ただし、このようなソリューションは学術目的でのみ使用してください。

于 2012-08-05T16:23:56.513 に答える
2

あなたは OOP の概念を理解していないと思います。new HashMap()このクラスの新しいオブジェクトを作成すると言うと、HashMap はクラスです。このクラスには、おそらく配列などのプライベート フィールドがいくつかあります。しかし、要点は、あなたはそれを知らないということです。クラスはそのフィールドを隠しています - それらはプライベートです。これらのフィールドにアクセスして使用するために、クラスはメソッドを提供します。たとえば、put(...)新しい要素を追加するために呼び出されるメソッドやget(...)、要素を取得するために呼び出されるメソッドなどです。

これらのフィールドにアクセスするためにコア Java を使用することはできません。クラスのプライベート フィールドにアクセスするための構文はありません。HashMap のメソッドを使用するだけで、他の (単純な) 方法はありません。(うーん、振り返りがありますが、それはまったく別のトピックです...)。

もちろん、HashMap は「コア Java」でプログラムされています。それがどのように見えるかに興味がある場合は、ソース コードjava.util.HashMapを見てください。

于 2012-08-05T16:34:05.613 に答える
1

取得するsの配列Map.Entryはプライベートであり、HashMap直接アクセスすることはできません。ただし、エントリセットからいつでも別の配列インスタンスを取得できるため、心配する必要はありません。

Set s=map.entrySet();
Map.Entry[] entries = s.toArray(new Map.Entry[0]);

編集後:

キーが与えられた値を取得するためにHashMapが提供するAPIの使用を避けたいのはなぜですか?iteratorおよびgetKey()およびおよびのロジックは、getValue()これらのメソッドのみがのプライベート状態にアクセスできるため、これらのメソッドの外部で複製することはできませんHashMap。これらのメソッドの外部でロジックを複製できたとしても、オブジェクト指向プログラミングのすべての信条を破ることになるので、そうしないでください。

于 2012-08-05T16:06:13.597 に答える
0

values()この方法を試してみてください

for (String sVal : map.values()) {

    System.out.println("Your values :"+ sVal);
}
于 2012-08-05T16:04:31.437 に答える
0

この強化された for ループを使用すると、マップから値を簡単に取得できます。

for (String variable : map.values()) {
    System.out.println(variable);
}
于 2015-07-09T12:48:41.003 に答える