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

用于useridTotalRankMapSorted.entrySet().iterator().next()访问第一项。最好确保您确实使用的是排序地图!

于 2012-07-25T12:10:57.220 回答
3

您可以使用 sorted Maps likeTreeMap来完成,而获取第一个元素的最简单方法是使用迭代器(如果您想保留插入顺序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 回答
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


要维护排序顺序(自然排序顺序,或由 a 定义Comparator),您应该使用任何实现SortedMap.

进一步提供对其键的总排序的 Map。地图是根据其键的自然顺序排序的,或者由通常在排序地图创建时提供的比较器排序。迭代排序地图的集合视图时会反映此顺序

来自http://docs.oracle.com/javase/6/docs/api/java/util/SortedMap.html

于 2012-07-25T12:10:10.777 回答
0

您需要创建一个LinkedHashMap来获取第一个插入的元素

然后->

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

1. HashMap是一个不实现接口的 Sorted Map

2.TreeMap如果要按顺序获取数据,请使用。

3.如果LinkedHashMap您希望节点相互链接,然后获取第一个元素,请使用。

于 2012-07-25T12:14:31.227 回答
0

首先,正如其他人所说,HashMap 没有排序。

其次,由于 Map 中的键是唯一的(不能将键映射到多个值)。

为什么不直接从地图 ( map.get(callinguserId)) 中获取,通过迭代条目获得了什么?

无论如何,如果只是一次。

于 2012-07-25T12:17:26.217 回答