TreeMap:有固定顺序的hashmap。在需要排序的Map时候才用TreeMap。

Map。在数组中我们是通过数组下标来对其内容索引的,键值对。

HashMap
HashMap 用哈希码快速定位一个键,但是元素存储无序。HashMap的实现是假定元素是放在一个圆形的环上,每次put进来的元素根据其hashCode计算该元素在圆环上索引,把该元素放到合适的位置。

注意:其put()函数支持null,而如果原位置上有值,则替换为新值后,并返回旧值。其返回过程确定的位置正是get()函数的实现。参见http://blog.csdn.net/longshenlmj/article/details/17077869

而TreeMap中所有元素按某种固定顺序存放,需要有序结果使用TreeMap。看下TreeMap
API帮助文档。其有扩展方法如firstKey(),lastKey(),还可以在存储时指定排序器,例子:

http://huangqiqing123.iteye.com/blog/1461163

默认的排序器都是简单的,如整数。

HashMap 非线程安全 TreeMap
非线程安全

TreeMap<Key, Entity>

Key类应该是一个含有sort值,并且支持Comparable接口的(好根据Key),

因为你要重新排序,肯定要创建TreeMap<Key, Entity>了。

http://www.jb51.net/article/32652.htm

http://www.iteye.com/wiki/blog/1278027

http://ydlmlh.iteye.com/blog/1413675

对毕业生去向进行统计。统计每个去向的人数。我想用TreeMap来进行存储,需要进行排序。要求是根据人数来降序排序。关键是TreeMa是根据红黑树的数据结构,是平衡树,只能根据key来排序,是不能根据value来排序的。因为红黑树的数据结构就是根据key的大小来组织起来的,如果不根据key来排序根本就不能形成TreeMap。必须根据key来排序,默认是根据key的自然排序来组织,比如integer的大小,String的字典排序。如果你的key不能根据默认排序得到,你就需要来继承comparable接口,实现compareTo方法来定义自己的排序方法。

http://bbs.csdn.net/topics/370026848

而treemap中文排序可以参见http://zfsn.iteye.com/blog/739493

http://blog.sina.com.cn/s/blog_4bcb612801000cdd.html

中文的复杂有时是很难完美解决的


就比如有多音字怎么办他按那个读音都是问题

这是必然存在问题的所以才说必要对多样化的东西进行排序这是缺陷

package com.zjbell.hibernate.buss;

import java.text.Collator;

import java.util.Iterator;

import java.util.Locale;

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;

import java.util.Map.Entry;

public class TreeMapTest {

public static void main(String[] args) {

Collator cmp = Collator.getInstance(Locale.CHINA);

Map<String, String> map = new TreeMap<String, String>(cmp);

map.put("c", "c");

map.put("a", "a");

map.put("b", "b");

map.put("d", "d");

map.put("麒麟", "麒麟");

map.put("鲍家", "鲍家");

map.put("安吉", "安吉");

map.put("阿详", "阿详");

map.put("重桥", "重桥");

map.put("泗水", "泗水");

Set<Entry<String, String>> s = map.entrySet();

Iterator<Entry<String, String>> i = s.iterator();

while(i.hasNext()){

Entry<String, String> e = i.next();

System.out.println(e.getKey() + " : " + e.getValue());

}

}

}

发现部分字 无法按拼音排序 ”麒“,“泗”,无法解决。

不知道用,pingyin4j可不可以。

Treemap 有序的hashmap。用于排序的更多相关文章

  1. TreeMap/LinkedHashMap/HashMap按键排序和按值排序

    今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排 ...

  2. 论HashMap、Hashtable、TreeMap、LinkedHashMap的内部排序

    参考文章 论HashMap.Hashtable.TreeMap.LinkedHashMap的内部排序

  3. Map随笔:有序的HashMap——LinkedHashMap

    目录 Map随笔:有序的HashMap--LinkedHashMap 一,概述 二,源码结构 三,总结 Map随笔:有序的HashMap--LinkedHashMap 一,概述 ​ LinkedHas ...

  4. 如何对一个不断更新的HashMap进行排序

    如何对一个不断更新的HashMap进行排序? 解答:等到HashMap更新稳定后,用ArrayList包装进行排序.或者自己写一个可以类似HashMap的有序Map,每次更新的时候都进行排序,构建自己 ...

  5. HashMap按键排序和按值排序

    对map集合进行排序   今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单 ...

  6. Java List/HashSet/HashMap的排序

    在对Java无序类集合,如List(ArrayList/LinkedList).HashSet(TreeSet有序).HashMap等排序时,Java中一个公共的类Collections,提供了对Ja ...

  7. 关于hashmap的排序

    刚学java不久 之前在学习hashmap的时候 无意间发现,诶?怎么结果是排序的,然后重新输入了好多次,握草,原来java 1.8都实现了hashmap的排序 天真的我没有去网上查,没有去想java ...

  8. 对HashMap进行排序

    首先来看看Map集合获取元素的三种常见方法keySet().values().entrySet() 1. values():返回map集合的所有value的Collection集合(于集合中无序存放) ...

  9. lightgbm用于排序

    一. LTR(learning to rank)经常用于搜索排序中,开源工具中比较有名的是微软的ranklib,但是这个好像是单机版的,也有好长时间没有更新了.所以打算想利用lightgbm进行排序, ...

随机推荐

  1. 如何使用《DB 查询分析器》高效地生成旬报货运量数据

    如何使用<DB 查询分析器>高效地生成旬报货运量数据 马根峰                    (广东联合电子服务股份有限公司, 广州 510300) 1      引言   中国本土 ...

  2. [ExtJS5学习笔记]第二十三节 Extjs5中表格gridpanel的列格式设置

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/39665979 官方文档:http://docs.sencha.com/extjs/5. ...

  3. XML之DTD(文档类型定义)

    文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构. DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 声明元素 在 DTD 中,XML 元素 ...

  4. ubuntu连接android设备(附最简单方法)

    在ubuntu下连接android设备,虽然不用像windows那样安装驱动,然而却会遇见一个错误:输入adb shell,会提示insufficient permissions for device ...

  5. android RecycleView Adapter简单封装

    早些时候我们使用系统提供个的BaseAdapter的时候为了满足大家的需要,我们总会对BaseAdapter做一层上层的封装,然后对于实际业务我们只需要关心getView里面的View即可,是代码可读 ...

  6. Java虚拟机定义

    虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.JVM屏蔽了与具体操作系统平台相关的 ...

  7. 压力测试工具Ab简介

    Apache安装包中自带的压力测试工具 Apache Benchmark(简称ab) 简单易用,这里就采用 ab作为压力测试工具了. 1.独立安装 通过 yum-utils中的yumdownload  ...

  8. UNIX网络编程——使用select 实现套接字I/O超时

    下面程序包含read_timeout.write_timeout.accept_timeout.connect_timeout 四个函数封装: /* read_timeout - 读超时检测函数,不含 ...

  9. Java异步通信

    服务器端: import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; impo ...

  10. Swift基础之:新的访问控制fileprivate和open

    (转载的,暂时没有研究过这类语句,有空看看) 在swift 3中新增加了两种访问控制权限 fileprivate和 open.下面将对这两种新增访问控制做详细介绍. fileprivate 在原有的s ...