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. Android自定义处理崩溃异常

    用过安卓手机的用户以及安卓开发者们会时长碰到程序异常退出的情况,普通用户遇到这种情况,肯定非常恼火,甚至会骂一生垃圾软件,然后卸载掉.那么开发者们在开发过程中遇到这种情况给怎么办呢,当然,你不可能世界 ...

  2. JAVA面向对象-----接口的概述

    接口的概述 **接口(interface):**usb接口,主要是使用来拓展笔记本的功能,那么在java中的接口主要是使用来拓展定义类的功能,可以弥补java中单继承的缺点. class Pencil ...

  3. Dynamics CRM 开启图表的3D效果展示

    CRM中的图表在我们的业务场景中用的很多,用户可以根据自己的实际需求来构建图表查看数据.我们平时看到的图表都是平面的,像下图中的这种,那有没有一种方式可以让展示3D效果看起来更立体呢,答案是可以的. ...

  4. Java中Excel导入功能实现、excel导入公共方法_POI -

    这是一个思路希望能帮助到大家:如果大家有更好的解决方法希望分享出来 公司导入是这样做的 每个到导入的地方 @Override public List<DataImportMessage> ...

  5. Android水印相机

    本篇文章实现的水印相机,类似于qq空间中的水印相机功能,因之前看过一个demo上实现了一个简陋的水印相机功能,觉得挺有意思,就在此基础上进行了修改,优化和完善,并增加了部分功能,使之更接近于qq水印相 ...

  6. Android开发中StackOverflowError

    Android开发中StackOverflowError错误实例分析 一.概述 我在一个复杂的layout嵌套较多的android界面,碰到了java.lang.StackOverflowError这 ...

  7. C++对C的实用性增强

    #include <iostream> using namespace std; //C语言中的变量都必须在作用域开始的位置定义!! //C++中更强调语言的"实用性" ...

  8. 05 Activity 跳转传值

    第一个Activity: package com.fmyboke; import java.io.Serializable; import java.util.ArrayList; import ja ...

  9. python进行md5加密

    代码函数 import hashlib def md5(str): m = hashlib.md5() m.update(str) return m.hexdigest() f = open('idf ...

  10. 套接字输入缓冲装置——InternalInputBuffer

    互联网的世界很复杂,信息从一端传向另一端过程也相当复杂,中间可能通过若干个硬件,为了提高发送和接收效率,在发送端及接收端都将引入缓冲区,所以两端的套接字都拥有各自的缓冲区,当然这种缓冲区的引入也带来了 ...