1
  if(callingflag)
            {
                int calledUserTp = totalPointsByUserid(callinguserid,jokercard);
                System.out.println("Total Points of the User Who has made a Call is ::"+calledUserTp);

            HashMap<Integer,Integer> useridTotalRankMap = totalPointsforEveryUser(jokercard);
            HashMap<Integer,Integer> useridTotalRankMapSorted = new HashMap<Integer, Integer>();
            useridTotalRankMapSorted = (HashMap<Integer, Integer>) sortByComparator(useridTotalRankMap);
            for(Map.Entry<Integer, Integer> entry :useridTotalRankMapSorted.entrySet())
            {
                System.out.println( entry.getKey() +"----"+entry.getValue());
                if(entry.getKey() == callinguserid )
                {
                    System.out.println( "GOOD CALL");
                    break;
                }

            }
    }

上記の for ループを回避するにはどうすればよいですか。useridTotalRankMapSorted はマップです

useridTotalRankMap と呼ばれるこのハッシュマップがあり、いくつかの合計ポイントを持つユーザー ID があります。

関係がない場合、calleruserid に対応する値がそのハッシュマップで最小かどうかを確認したいと思います。

あると言う

1:4
4:7
3:7
2:5

および calleruserid = 1 。key=1、つまり 4 の値が最小の場合、「good call」と出力します。

私が今はっきりしていることを願っています。

コーディング方法に変更はありますか?

4

7 に答える 7

5

HashMap はソートされません。最初の要素はありません。

于 2012-07-25T12:10:06.700 に答える
3

Mapのようなソートされたsでそれを行うことができTreeMap、最初の要素を取得する最も簡単な方法は、イテレータを使用することです(挿入順序を保持したい場合LinkedHashMap):

Map m = new TreeMap(); // get it from somewhere else otherwise it doesn't make sense
Set s = m.entrySet();
Iterator i = s.iterator();
if (i.hasNext()) {
    Object firstElement = i.next();
}
于 2012-07-25T12:12:14.017 に答える
3

useridTotalRankMapSorted.entrySet().iterator().next()最初の項目にアクセスするために使用します。本当にソートされたマップを使用していることを確認してください!

于 2012-07-25T12:10:57.220 に答える
2

HashMaps は順序を保証しません。

このクラスは、マップの順序を保証しません。特に、順序が長期的に一定であることを保証するものではありません。

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.htmlから


広告掲載順序を維持するには、LinkedHashMap.

Map インターフェイスのハッシュ テーブルとリンク リストの実装で、反復順序が予測可能です。この実装が HashMap と異なる点は、そのすべてのエントリを実行する二重リンク リストを維持することです。この連結リストは反復順序を定義します。これは通常、キーがマップに挿入された順序 (挿入順序) です。キーがマップに再挿入されても、挿入順序は影響を受けないことに注意してください。

http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.htmlから


並べ替え順序 (自然な並べ替え順序、または で定義された順序)を維持するにはComparator、 を実装する任意のクラスを使用する必要がありますSortedMap

キーの全体的な順序付けをさらに提供するマップ。マップは、そのキーの自然な順序付けに従って、または並べ替えられたマップの作成時に通常提供される Comparator によって順序付けられます。この順序は、並べ替えられたマップのコレクション ビューを反復処理するときに反映されます。

http://docs.oracle.com/javase/6/docs/api/java/util/SortedMap.htmlから

于 2012-07-25T12:10:10.777 に答える
0

まず、誰もが言ったように、HashMap はソートされません。

次に、Map のキーは一意であるため (キーを複数の値にマップすることはできません)。

マップ ( ) から取得しないのはなぜmap.get(callinguserId)ですか。エントリを反復処理して得たものは何ですか?

とにかく一度だけ真になる場合。

于 2012-07-25T12:17:26.217 に答える
0

LinkedHashMap最初に挿入された要素を取得するには、 を作成する必要があります

次に->

useridTotalRankMapSorted.entrySet().iterator().next().getKey()
useridTotalRankMapSorted.entrySet().iterator().next().getValue()
于 2012-07-25T12:14:14.503 に答える
0

1. Interfaceを実装しないクラスHashMapです。 Sorted Map

2.順番にデータを取得しTreeMapたい場合に使用します。

3.LinkedHashMapノードを互いにリンクさせたい場合に使用し、最初の要素をフェッチします。

于 2012-07-25T12:14:31.227 に答える