实时搜索: map如何排序

map如何排序

388条评论 5995人喜欢 2914次阅读 340人点赞
排序根据这个Map中的两个元素的顺序进行排序
Map a = new HashMap();
a.put("sts", "1");a.put("no", "0002");
b.put("sts", "2");b.put("no", "0003");
Map c= new HashMap();
c.put("sts", "2");c.put("no", "0001");
Map d = new HashMap();
d.put("sts", "3"); d.put("no", "0001");
f.pu...

linkedmap怎么通过value排序: 这样必须要通过hashmap将key值与value值相互关联,通过在遍历hashmap的时候,把key值和value值对应的保存起来

java map容器 哪些排序: 一.理论准备
Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。
TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。
Map.Entry返回Collections视图。

二.key排序
TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,如下:
import java.util.Comparator;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.TreeMap;public class TreeMapTest { public static void main(String[] args) { Map<String, String> map = new TreeMap<String, String>( new Comparator<String>() { public int compare(String obj1, String obj2) { // 降序排序 return obj2.compareTo(obj1); } }); map.put("b", "ccccc"); map.put("d", "aaaaa"); map.put("c", "bbbbb"); map.put("a", "ddddd"); Set<String> keySet = map.keySet(); Iterator<String> iter = keySet.iterator(); while (iter.hasNext()) { String key = iter.next(); System.out.println(key + ":" + map.get(key)); } }}

运行结果如下:
d:aaaaac:bbbbbb:ccccca:ddddd

三.value排序
上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较,如下:
import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.TreeMap;public class TreeMapTest { public static void main(String[] args) { Map<String, String> map = new TreeMap<String, String>(); map.put("a", "ddddd"); map.put("c", "bbbbb"); map.put("d", "aaaaa"); map.put("b", "ccccc"); //这里将map.entrySet()转换成list List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet()); //然后通过比较器来实现排序 Collections.sort(list,new Comparator<Map.Entry<String,String>>() { //升序排序 public int compare(Entry<String, String> o1, Entry<String, String> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for(Map.Entry<String,String> mapping:list){
System.out.println(mapping.getKey()+":"+mapping.getValue());
}
}}

运行结果如下:
d:aaaaac:bbbbbb:ccccca:ddddd

MapFile是全局排序么?和MapFileOutputFormat有什么关系: MapFile是基于SequenceFile开发,可以说是带索引版的SequenceFile。MapFile由两部分组成:data和index,均由SequenceFile实现。其中data会按照键值对的方式存储数据,index存储索引,主要记录key值和每个记录的偏移值。数据访问时,会先将索引文件加载到内存中,根据映射关系定位文件位置。
所以,MapFile是全局排序。MapFileOutputFormat实际上使用的仍是MapFile的reader。所以会根据MapFile的索引文件保证的顺序。
由于MapFile是一个排序的文件,典型的场景例如合并多个小文件,将小文件根据key值排序合并成大文件。

R语言中heatmap.2()作图如何调整列的排序: 在Excel中选中要做热图的全部数据 (不要选择行列标题!),然后执行以下操作:逗条件格式地--逗色阶地--逗其他规则地

默认是逗双色刻度地,可改成逗三色刻度地

然后设置最小值、中间值、最大值的类型和颜色

建议将类型都改为逗数字地,好处是可以自定义最小值、中间值、最大值的数值大小。然后用windows自带的截图工具(截屏也可以)截取逗预览地后面的色条。
注意:你的数据应该在设置的最小值和最大值范围之内。例图中的数据范围是0.3~9.84,因此这里设置最小值0,最大值10,中间值采用0和10的中位数5

将截取的色条粘贴到Excel中,效果如图。

如果觉得色条太长,可以作如下调整:
选中色条,提高Excel的缩放比例,直到能看到色条短边上的小方块,鼠标移动到小方块上,调节色条宽度

在色条上方的对应单元格内输入主要刻度值。
为了美观,可将Excel单元格的填充色都改为白色,并适当调节行高、列高。
到这里,热图基本上就做好了。
觉得数字碍眼看Excel似乎没有透明字体,那就试试Adobe Illustrator吧

复制Excel中的热图,在Illustrator中新建一个空白文档,粘贴。如果粘贴的内容超过了空白文档的边界,请重新新建一个大一点的文档吧。
然后Ctrl+A全选,右键--取消编组

保持全选状态,右键--释放剪切蒙板,然后就可以选择单个的文字了。

删掉热图中所有的数字,然后保存为pdf等格式的文档,用Acrobat打开pdf可另存为图片格式,大功告成!

List中存放了多个Map,想将List中的Map存放顺序重新排序: package com.compare.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {
public static void main(String[] args) {
Main mainTest=new Main();
mainTest.sortMap();
}

public void sortMap(){
List<Map<Integer, Double>> maps=new ArrayList<Map<Integer, Double>>();
for(int i=0;i<10;i++){
HashMap<Integer, Double> map=new HashMap<Integer, Double>();
for(int j=0;j<2;j++){
map.put(j, Math.random());
}
maps.add(map);
}

for(Map<Integer, Double> map:maps){
System.out.println(getValue(map));
}
System.out.println("************************");
Map<Integer, Double> currentMap;
for(int i=0;i<maps.size()-1;i++){
for(int j=0;j<maps.size()-i-1;j++){
if(getValue(maps.get(j))>getValue(maps.get(j+1))){
currentMap=maps.get(j+1);
maps.set(j+1, maps.get(j));
maps.set(j,currentMap);
}
}
}

for(Map<Integer, Double> map:maps){
System.out.println(getValue(map));
}

}

public Double getValue(Map<Integer, Double> currentMap){
return currentMap.get(0)+currentMap.get(1);
}

}

arcmap10.0如何给线段重新排序: 因为你的这个输入方法 系统只能理解为是文本格式,而不是数值,对于文本的排序从小到大就是这样的。

变成数值吧,前面加=号。出现一个数,需要显示公式的话,再在旁边输入你原先的。
就是需要两个格,一个是你要的显示,一个是真正的公式。到时候按这个公式进行排序

java Map.Entry排序问题: LZ何来Entry类是倒序之说啊?不解。。。

参见 java.util.Map.entrySet()

Returns a Set view of the mappings contained in this map.
The set is backed by the map, so changes to the map ......
~~~~~~~~依据这里?

请教java中的TreeMap如何顺序按照插入顺序排序?: 你可以使用linkedHashMap 这个是可以记住插入顺序的

  • hfd什么意思

    请问电影《立春》的原著是什么,作者是谁?: 据说是真人事迹改编的,应该没有原著吧? ...

    928条评论 3842人喜欢 2777次阅读 731人点赞
  • nlp是什么

    请问北京哪里有卖布料的地方,要各种布料比较全的!: 我现在一般都网上买。。原来在新街口有个大新纺织城,不过总觉得好贵又不全 ...

    725条评论 5751人喜欢 3437次阅读 340人点赞
  • 10年不感冒会怎样

    注册会计师一年可以考几次: 注册会计师一年能考几次 ...

    810条评论 1063人喜欢 3191次阅读 492人点赞