无法从类型HashMap对非静态方法keySet()进行静态引用



我想能够按键对下面的HashMap进行排序,我已经尝试了如下代码:

SortedSet<String> keys = new TreeSet<String>(HashMap.keySet());
for (String key : keys) { 
  // String value = map.get(key);
   // do something
}

但这又带来了错误:

Cannot make a static reference to the non-static method keySet() from the type HashMap

如果有人能为我指明正确的方向,那就太好了,谢谢!

HashMap及其关键:

ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
// XML node keys
static final String KEY_ITEM = "item"; // parent node
static final String KEY_ID = "id";
static final String KEY_NAME = "name";
static final String KEY_TITLE = "title";
static final String KEY_COST = "cost";
static final String KEY_DESC = "description";
static final String KEY_LINK = "link";
static final String KEY_PUBDATE = "pubDate";

您正在使用"HashMap"调用"keySet()"方法,就好像这是一个静态方法一样。您需要在map对象上调用"keySet()"方法,但不能通过类调用。

更改此

SortedSet<String> keys = new TreeSet<String>(HashMap.keySet());

到这个

SortedSet<String> keys = new TreeSet<String>(map.keySet());
SortedSet<String> keys = new TreeSet<String>(HashMap.keySet());

keySet()是一个非静态方法,所以您必须在HashMap的实例上调用keySet()。

所以试试这个:

HashMap<String, String> test = new HashMap<String,String>();
String KEY_ITEM = "item";
String KEY_ID = "id";
test.put(KEY_ITEM, "value");
test.put(KEY_ID, "value");
SortedSet<String> keys = new TreeSet<String>(test.keySet());

有两种方法可以实现这一点:

a.使用HashMap,但将密钥集转换为TreeSet

SortedSet<String> keys = new TreeSet<String>(map.keySet());

b改为使用TreeMap,当您放置任何条目时,其密钥已排序:

public static void main(String[] args){
    Map<String,String>map =new TreeMap<>();
    map.put("F", "F");
    map.put("C", "C");
    map.put("A", "A");
    map.put("ABC", "ABC");
    map.put("AB", "AB");
    Set<String> set=map.keySet();//been sorted      
    for (String key : set) { 
            System.out.println(map.get(key));
    }
}

输出:

A
AB
ABC
C
F

最新更新