在已排序的地图中显示第一条记录

问题描述:

我试图显示出17K中的前40条记录,我已将其存储在地图中。我有以下代码在已排序的地图中显示第一条记录

import java.util.*; 
Map<String, Integer> doubleCount= new HashMap<String,Integer>(); 
.... 
Map<String,Integer> newDouble40 = doubleCount.headMap(40); 

的Java是给我下面的错误:

" cannot find symbol - method subMap... 

所以我尝试:

Map<String,Integer> newDouble40 = doubleCount.subMap("",(Integer)40); 

以及确切的错误是: 无法找到符号 - 方法subMap(java.lang.String,java.lang.int)

http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html 我该如何排序?

+3

'subMap'是'SortedMap'的一种方法,但您的'doubleCount'对象具有抽象的'Map'接口作为其静态类型,而且未排序的'HashMap'也是动态类型。所以,如果你需要的话,首先使用'SortedMap'。 – 5gon12eder 2014-10-02 04:41:44

subMap()headMap()两种方法在SortedMap那些不具备Map

你可以尝试以下方法

Map<String, Integer> doubleCount= new HashMap<String,Integer>(); 
SortedMap<String, Integer> newMap= new TreeMap<>(doubleCount); 
Map<String,Integer> newDouble40 = newMap.subMap("0","40"); 

你的情况KeysString,所以你必须subMap("0","40")String值。 0是开始键,“40”是结束键。您的newDouble40的元素有一个在040之间的密钥。

在这里您可以使用headMap()作为newMap.headMap("40")。现在您将获得具有小于40的关键点的元素。

如:

Map<String, Integer> doubleCount= new HashMap<>(); 
doubleCount.put("c",1); 
doubleCount.put("d",2); 
doubleCount.put("a",1); 
doubleCount.put("b",4); 
SortedMap<String, Integer> newMap= new TreeMap<>(doubleCount);//sorted now 
Map<String,Integer> map1 = newMap.subMap("a", "c"); 
Map<String,Integer> map2 = newMap.headMap("c"); 
System.out.println(map1); 
System.out.println(map2); 

输出地说:

{a=1, b=4} 
{a=1, b=4} 
+0

感谢您的帮助,我过去了那个错误,但我的问题依然存在,请看下面我的回答 - – Mira 2014-10-02 16:57:46

主要这里的问题是,你正在尝试使用(java.util.SortedMap中)子接口的方法,接口没有按地图不暴露headMap(...)或subMap(...)方法。

正确的代码,将编译将是:

你应该考虑
SortedMap<String, Integer> doubleCount = new TreeMap<String, Integer>(); 

Map<String, Integer> newDoubleCount = doubleCount.headMap("40"); 

的一件事是什么,该SortedMap的方法返回一个基于密钥参数的地图的一部分,与键比较在地图中,除非你知道第40个元素的键值是多少,否则你不能使用这些方法。

+0

请看下面 – Mira 2014-10-02 16:56:55