问题描述
HashMap 形式
HashMap< String, Integer >
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("java",1);
map.put("python",2);
map.put("c#",3);
map.put("c",4)
map.put("R",5)
期望Result:
c,4
R,5
c#,3
java,1
python,2
HashMap< String, String >
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("java","a");
map.put("python","b");
map.put("c#","c");
map.put("c","d")
map.put("R","e")
期望Result:
c,d
R,e
c#,c
java,a
python,b
按照Map的键值长度排序,如果遇到同等长度,则按字母序排序。
特别注意错误代码展示,分析
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("java",1);
map.put("python",2);
map.put("c#",3);
map.put("c",4)
map.put("R",5)
Map<String,Integer> treeMap = new TreeMap<String, Integer>(
new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());//keep the first one and remove all key-value which has the same key length with the first one
}
}
);
treeMap.putAll(map);
System.out.println(treeMap);
}
}
这样写,对应同等长度的key 代码会认为他们是冗余的,从map中remove掉。最后输出结果将仅保留同等长度的一个key,删除其他所有:
输出:
c,4
c#,3
java,1
python,2
可以看到代码将 R,5 删除,他与c,4有着同等的键值长度。
正确实现
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class Test {
public static void main(String[] args) {
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("java",1);
map.put("python",2);
map.put("c#",3);
map.put("c",4)
map.put("R",5)
Map<String, Integer> treeMap = new TreeMap<String, Integer>(
new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (s1.length() > s2.length()) {
return -1;
} else if (s1.length() < s2.length()) {
return 1;
} else {
return s1.compareTo(s2);//if equal return alphabetical order
}
}
});
treeMap.putAll(map);
System.out.println(treeMap);
}
}
输出:
c,4
R,5
c#,3
java,1
python,2
这样可以避免删除有同等key长度的键值对