Treemap 有序的hashmap。用于排序
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。用于排序的更多相关文章
- TreeMap/LinkedHashMap/HashMap按键排序和按值排序
今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排 ...
- 论HashMap、Hashtable、TreeMap、LinkedHashMap的内部排序
参考文章 论HashMap.Hashtable.TreeMap.LinkedHashMap的内部排序
- Map随笔:有序的HashMap——LinkedHashMap
目录 Map随笔:有序的HashMap--LinkedHashMap 一,概述 二,源码结构 三,总结 Map随笔:有序的HashMap--LinkedHashMap 一,概述 LinkedHas ...
- 如何对一个不断更新的HashMap进行排序
如何对一个不断更新的HashMap进行排序? 解答:等到HashMap更新稳定后,用ArrayList包装进行排序.或者自己写一个可以类似HashMap的有序Map,每次更新的时候都进行排序,构建自己 ...
- HashMap按键排序和按值排序
对map集合进行排序 今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单 ...
- Java List/HashSet/HashMap的排序
在对Java无序类集合,如List(ArrayList/LinkedList).HashSet(TreeSet有序).HashMap等排序时,Java中一个公共的类Collections,提供了对Ja ...
- 关于hashmap的排序
刚学java不久 之前在学习hashmap的时候 无意间发现,诶?怎么结果是排序的,然后重新输入了好多次,握草,原来java 1.8都实现了hashmap的排序 天真的我没有去网上查,没有去想java ...
- 对HashMap进行排序
首先来看看Map集合获取元素的三种常见方法keySet().values().entrySet() 1. values():返回map集合的所有value的Collection集合(于集合中无序存放) ...
- lightgbm用于排序
一. LTR(learning to rank)经常用于搜索排序中,开源工具中比较有名的是微软的ranklib,但是这个好像是单机版的,也有好长时间没有更新了.所以打算想利用lightgbm进行排序, ...
随机推荐
- 自制Linux 终端 锁屏防窃助手
很多时候我们不能一直守护在自己的电脑旁边,而且有些文件并不想让别人知道.那么这时候来个锁屏,是再合适不过的了.今天分享一个自制的锁屏工具,如下. 准备 操作系统 : 我这里是ElementaryOS虚 ...
- linux配置java环境变量 转过几个,这个最详细和靠谱
一. 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,之后会在当前目录下生成一个jdk1.6.0_14目录二. 需要配置的环境变量 1. PATH环境 ...
- iOS开发之字数不一的多标签Demo
有朋友让帮他写一个封装的字数不一的多标签视图,所以今天将代码展示一下,供大家学习 代码中封装了两种方法,分别是:1.传递数组,数组中是NSString类型的方法:2.传递数组,数组中是NSDictio ...
- iOS开发之WKWebView代替UIWebView
前言 Xcode8发布以后,编译器开始不支持IOS7,所以很多应用在适配IOS10之后都不在适配IOS7了,其中包括了很多大公司,网易新闻,滴滴出行等.因此,我们公司的应用也打算淘汰IOS7. 支持到 ...
- 剑指Offer--图的操作
剑指Offer–图的操作 前言 企业笔试过程中会涉及到数据结构的方方面面,现将有关图的深度优先搜索与广度优先搜索进行整理归纳,方便日后查阅. 在已做过的笔试题目中,可用DFS解决的题目有: & ...
- Linux设备驱动编程---miscdevice杂类设备的使用方法
miscdev简称杂类设备杂类设备就是对字符设备驱动做一个封装,方便简单使用杂类设备封装字符设备需要包含的头文件:#include <linux/miscdevice.h>(1)杂类设备的 ...
- java基础---Java---面试题---银行业务调度系统(线程同步锁、枚举、线程池)
银行业务调度系统的项目需求: 模拟实现银行业务调度系统逻辑,具体需求如下: Ø 银行内有6个业务窗口,1- 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口. Ø 有三种对应类 ...
- linux iio子系统
//============================================================================\\ || 系 统:W ...
- 【java集合框架源码剖析系列】java源码剖析之TreeMap
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于TreeMap的知识. 一TreeMap的定义: public class TreeMap&l ...
- AsyncTask(异步任务)讲解-android的学习之旅(四十六)
AsyncTask简介 Android的UI线程主要处理用户的按键,触屏和View的绘制等,不能在里面处理耗时的操作,否则会出现ANR,因此耗时的操作要单独开一个线程处理,但是新线程不能直接处理UI线 ...