基于键的地图排序

Sat*_*tya 3 java hashtable hashmap

这基本上不是HashMap基于键的排序方式.为此,我可以直接使用TreeMap没有眨眼:)

我现在拥有的是

Map<String, Object> favoritesMap = new HashMap<String, Object>();
and its contents can be
["Wednesdays" : "abcd"]
["Mondays" : "1234"]
["Not Categorized" : "pqrs"]
["Tuesdays" : "5678"]
Run Code Online (Sandbox Code Playgroud)

我想基于键对HashMap进行排序,除此之外,我需要"未分类"才能找到最后一个.

因此,在迭代keySet时所期望的是

["Mondays", "Tuesdays", "Wednesdays", "Not Categorized"] i.e. sorted on keys and "Not Categorized" is the last one
Run Code Online (Sandbox Code Playgroud)

HashMap在创建时加入,["Not Categorized" : "pqrs"]但最后添加但HashMap不保证顺序:)

解决方案的任何其他指针?

Old*_*eon 5

您是否TreeMap因某些外部原因而特意排除?如果没有,你显然可以使用TreeMap特制的Comparator.

你考虑过其他任何一个SortedMap吗?

如果TreeMap肯定是出局,我会延伸HashMap并使它看起来总是有一个条目,但这肯定不是一件小事.SortedMap在走这条路之前你应该有一个很好的理由不使用.

添加

下面是一个示例,说明如何使用以下方法使特定条目始终排序到最后TreeMap:

// This key should always appear at the end of the list.
public static final String AtEnd = "Always at the end";

// A sample map.
SortedMap<String, String> myMap =
        new TreeMap<>(
        new Comparator<String>() {
          @Override
          public int compare(String o1, String o2) {
            return o1.equals(AtEnd) ? 1 : o2.equals(AtEnd) ? -1 : o1.compareTo(o2);
          }
        });

private void test() {
  myMap.put("Monday", "abc");
  myMap.put("Tuesday", "def");
  myMap.put("Wednesday", "ghi");
  myMap.put(AtEnd, "XYZ");

  System.out.println("myMap: "+myMap);
  // {Monday=abc, Tuesday=def, Wednesday=ghi, Always at the end=XYZ}
}
Run Code Online (Sandbox Code Playgroud)

我想知道你是否正在寻找一些变体?