如何让 Map 中的值按放入顺序输出

如题所述

第1个回答  2014-11-09
map的iterator是基于key的“大小”排序的。
第2个回答  推荐于2017-09-06
java.util.TreeMap 放入其中的value,自动按key进行排序, 默认的排序规则按ascii码排序,如果是key是英文和数字不会有问题,如果中文则会出现问题,需要自己写排序规则。
比较器需要实现java.text.Collator类,例如:

package cn.tjopen.mediaman.util;

import java.text.CollationKey;
import java.text.Collator;

public class CollatorComparator extends Collator {
private Collator collator = Collator.getInstance();
private int sort=1;
@Override
public int compare(String arg0, String arg1) {
CollationKey key1 = collator.getCollationKey(arg0);
CollationKey key2 = collator.getCollationKey(arg1);
return sort*key1.compareTo(key2);
}
/**
* 设定排序的方向
* @param i 排序方向(正数:正序;负数:倒序)
*/
public void setSort(int i){
if(i>0){
sort=1;
}else if(i<0){
sort=-1;
}
}
@Override
public CollationKey getCollationKey(String arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public int hashCode() {
// TODO Auto-generated method stub
return 0;
}

}

比较器的使用:

int sort = 1;//>0正序<0倒叙

CollatorComparator comparator = new CollatorComparator();
comparator.setSort(sort);
Map map = new TreeMap(comparator);

然后在把要排序的字段作为key,相应的信息作为对应的value,即可实现排序

注意:key值不能重复,如果排序字段有重复,则需要进行处理。

例如:方法一:在向map中存放数据时,先判断要放的key是否已存在,如果存在在当前值后面加一区分标记

方法二:如果信息中有不可能重复的字段,在排序字段后面加上这个不重复的字段值,把这个组合当做key本回答被提问者和网友采纳
相似回答