java map 排序 取数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java map 排序 取数相关的知识,希望对你有一定的参考价值。

现在map中有数据
key,value

"北京",10
"天津",8

"上海",9

"杭州",10
"广州",7

"深圳",8

"厦门",5

我想打印出分数并列排名前三的城市的值

"北京",10

"杭州",10

"上海",9

"天津",8

"深圳",8

这样一个结果
不知道在map中怎么根据值排序取到并列前三的值?

参考技术A public class SortTest

public static void main(String[] args)

List<Map.Entry<String,String>> mappingList = null;
Map<String,String> map = new HashMap<String,String>();
map.put("month", "1");
map.put("bread", "3");
map.put("attack", "2");
map.put("dsk", "2");

//通过ArrayList构造函数把map.entrySet()转换成list
mappingList = new ArrayList<Map.Entry<String,String>>(map.entrySet());
//通过比较器实现比较排序
Collections.sort(mappingList, new Comparator<Map.Entry<String,String>>()
public int compare(Map.Entry<String,String> mapping1,Map.Entry<String,String> mapping2)
return mapping2.getValue().compareTo(mapping1.getValue());

);

for(Map.Entry<String,String> mapping:mappingList)
System.out.println(mapping.getKey()+":"+mapping.getValue());


参考技术B public static void main(String[] args)

Map map=new HashMap();
map.put("北京", 10);
map.put("天津", 8);
map.put("上海", 9);
map.put("杭州", 10);
map.put("广州", 7);
map.put("深圳", 8);
Set set=map.keySet();
Iterator it=set.iterator();
List<Integer> list=new ArrayList();
while(it.hasNext())

String key=(String) it.next();
int value=Integer.parseInt(map.get(key).toString()) ;
list.add(value);

Collections.sort(list);
for (int i = 0; i < list.size(); i++)

if(list.get(i)==list.get(i+1))

list.remove(i);


for (int i =list.size()-1; i >=0; i--)

Set set1=map.keySet();
Iterator it1=set1.iterator();
while(it1.hasNext())

String key=(String) it1.next();
int value=Integer.parseInt(map.get(key).toString()) ;
if(value==list.get(i))

System.out.println("key="+key+";value="+value);





代码很长 不懂在问我吧 没想到太好的方法追问

按照list.size循环 处理remove之后不是会下标越界吗?

追答

不会 list.size()是变量 你可以测试下

本回答被提问者采纳
参考技术C public static void main(String[] args)
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("北京", 10);
map.put("杭州", 10);
map.put("上海", 9);
map.put("天津", 8);
map.put("深圳", 8);
Collection<Integer> set = map.values();
Object[] a = set.toArray();
Arrays.sort(a);
for (int j = a.length - 3; j < a.length; j++)
Iterator<String> it = map.keySet().iterator();
while (it.hasNext())
String str = it.next();
if (map.get((str)).equals(a[j]))

System.out.println("\"" + str + "\"," + a[j] + "");
break;



追问

= =哥们你这方法是按照答案来写的啊

追答

不是啊 变换成数组之后进行排序,然后输出啊!!!

追问

哦是我看错了,不好意思啊

abap 取数排序之后怎么取第一行

用索引读取 单行
要用索引从 内表中读取 单行,请使 用 READ 语句,用法 如下:
语法
READ TABLE <itab> [INTO <wa>] INDEX <idx>.
用 INTO 选项指定目 标区域 <wa>。 如果表格有 表头行,可 以忽略 INTO 选项。这样 ,表格工作 区域就成了 目标区域。
系统用索引 <idx> 从表格 <itab> 中读取行。 这比用关键 字访问表格 要快(参见 读取有关键字的单行 )。
如果找到有 指定索引的 条目,则将 系统字段 SY-SUBRC 设置为0, 而且 SY-TABIX 包含该行的 索引。否则 ,SY-SUBRC 包含非0值 。
如果 <idx> 小于或等于 0,则会发 生实时错误 。如果 <idx> 超过表格大 小,系统将 SY-SUBRC 中的返回代 码值设置为 4。
DATA: BEGIN OF ITAB OCCURS 10,
COL1 TYPE I,
COL2 TYPE I,
END OF ITAB.
DO 20 TIMES.
ITAB-COL1 = SY-INDEX.
ITAB-COL2 = 2 * SY-INDEX.
APPEND ITAB.
ENDDO.
READ TABLE ITAB INDEX 7.
WRITE: SY-SUBRC, SY-TABIX.
WRITE: / ITAB-COL1, ITAB-COL2.
其输出为:
0 7
7 14
在此创建有 表头行的内 表 ITAB, 并用20行 对其进行填 充。读取并 输出索引为 7的行。
参考技术A READ INT_TAB INTO WA_TAB INDEX 1. 参考技术B 黄石美瞳仓库,阿坝美瞳批发,大同美瞳代发哪家不错

以上是关于java map 排序 取数的主要内容,如果未能解决你的问题,请参考以下文章

[洛谷P2045]方格取数加强版

Luogu1006 传纸条 与 Luogu P2045方格取数加强版 (费用流)

abap 取数排序之后怎么取第一行

插入排序(Insertion Sort)

怎么用matlab生成随机数,排序,取数排序前的位置?

P1392 取数(优先队列)