public class Test{
public static void main(String[] args) {
//map里放的是姓名,值是出现在的次数
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("lisi", 5);
map.put("lisi1", 1);
map.put("lisi2", 3);
map.put("lisi3", 9);
}
//进行排序,排序之后的输出
// map.put("lisi1", 1);
// map.put("lisi2", 3);
// map.put("lisi", 5);
// map.put("lisi3", 9);
}
你说的按要求排序,应该是有一些自定义规则排序吧,假如要通过值来排序可以用以下方法:
[code="java"]
public static void main(String[] args) {
Map map = new HashMap();
map.put("lisi", 5);
map.put("lisi1", 1);
map.put("lisi2", 3);
map.put("lisi3", 9);
List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(
map.entrySet());
System.out.println("--------------排序前--------------");
for (int i = 0; i < infoIds.size(); i++) {
String id = infoIds.get(i).toString();
System.out.println(id);
}
// 排序
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return ( o1.getValue()-o2.getValue());
}
});
System.out.println("--------------排序后--------------");
for (int i = 0; i < infoIds.size(); i++) {
Entry<String,Integer> ent=infoIds.get(i);
System.out.println(ent.getKey()+"="+ent.getValue());
}
}
[/code]
用LinkedHashMap就可以了,这个是有序的Map
HashMap 不能排序,可用楼上的方法解决
似乎只有对Key进行排序的,对Value的有吗?
首先要明确一点, HashMap是没有顺序的,
如果一定要用HashMap, 可以参考以下方法, 此处写出思路:
在读取MAP的时候这样做:
1. 反射map去除所有key, 存入List或Array. 注(list操作较方便, 可以直接toArray)
2. 利用Array.sort()方法进行排序.
3. 按排序后的顺序取出key, 然后通过key取Map, 即可获得排序后的Map
简单的代码示例(无验证):
List list = new ArrayList(map.keySet());
Object[] ary = list.toArray();
Arrays.sort(ary);
list = Arrays.asList(ary);
for (Object o : list) {
System.out.println(map.get(o));
}
LinkedHashMap 只能保证插入的顺序 不能排序 AngelAndAngel 的方法很好
sc1333的方法是按key排序 楼主要的是value排序
另外 你可以这样
[code="java"]
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class Test {
public static void main(String[] args) {
Map<Order, Integer> map = new TreeMap<Order, Integer>();
map.put(new Order("lisi", 5), 5);
map.put(new Order("lisi1", 1), 1);
map.put(new Order("lisi2", 3), 3);
map.put(new Order("lisi3", 9), 9);
Set<Map.Entry<Order, Integer>> set = map.entrySet();
for (Map.Entry<Order, Integer> entry : set) {
System.out.print(entry.getKey().key+ "--");
System.out.println(entry.getValue());
}
}
}
class Order implements Comparable {
String key;
int count;
public Order(String key, int count) {
this.key = key;
this.count = count;
}
@Override
public int compareTo(Order o) {
return (count > o.count) ? 1 : count == o.count ? 0 : -1;
}
}
[/code]
不过还有有点多余 没有AngelAndAngel 的方法好