Java HashMap 默认排序

先看一段Java代码。


package com.m58.test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {

    public static void main(String[] args) {
        HashMap<Integer,String> map = new HashMap<Integer,String>();
        map.put(1,"oa1");
        map.put(3,"oa3");//故意不按顺序放入
        map.put(2,"oa2");
        map.put(4,"oa4");

        List<String> list = new ArrayList<String>();
        for(Map.Entry<Integer, String> entry : map.entrySet()){
            System.out.println("entry.getKey.hash:" + entry.getKey().hashCode());
            list.add(entry.getValue());
        }

        System.out.println(list);
    }
}

看一下输出

   entry.getKey.hash:1
   entry.getKey.hash:2
   entry.getKey.hash:3
   entry.getKey.hash:4
   [oa1, oa2, oa3, oa4]

看到了没,打印出来居然是按照key(数字)进行排序的。当然这个有顺序不是指插入顺序,而是指key的顺序。这样就产生一个问题,Java是如何在HashMap内部进行排序的,它怎么知道一堆散列表的数据,塞到一个看似按照数字从小到大进行排序的呢,百度后我们发现,HashMap就是按照HashCode编码进行从小到大的排序,这样就说的通了。1的hash值是1,2的哈希值是2,只要把key设置为数字,于是就按照从小到大去排序咯。

@落雨 2015年10月24日01:06:22
http://ae6623.cn

时间: 2024-10-25 18:28:35

Java HashMap 默认排序的相关文章

Java HashMap的工作原理_java

大部分Java开发者都在使用Map,特别是HashMap.HashMap是一种简单但强大的方式去存储和获取数据.但有多少开发者知道HashMap内部如何工作呢?几天前,我阅读了java.util.HashMap的大量源代码(包括Java 7 和Java 8),来深入理解这个基础的数据结构.在这篇文章中,我会解释java.util.HashMap的实现,描述Java 8实现中添加的新特性,并讨论性能.内存以及使用HashMap时的一些已知问题. 内部存储 Java HashMap类实现了Map<K

Java实现选择排序算法的实例教程_java

选择排序概念 选择排序也是一种交换排序算法,和冒泡排序有一定的相似度,因此个人认为选择排序可以视为冒泡排序的一种改进算法.它的思路是这样的: 设现在要给数组arr[]排序,它有n个元素. 1对第一个元素(Java中,下标为0)和第二个元素进行比较,如果前者大于后者,那么它一定不是最小的,但是我们并不像冒泡排序一样急着交换.我们可以设置一个临时变量a,存储这个目前最小的元素的下标.然后我们把这个目前最小的元素继续和第三个元素做比较,如果它仍不是最小的,那么,我们再修改a的值.如此直到和最后一个元素

深入解析java HashMap实现原理_java

Mark一下,同时可以很好的结合hashCode()和equals()方法,覆盖equals方法时最好覆盖hashcode(),保证equals的两个对象,hashcode也相等,反过来:hashcode()不等,一定能推出equals()也不等:hashcode()相等,equals()可能相等,也可能不等. 因为HashMap在get时,先比较hashcode,再比较equals,hashcode==&&equals,两者都为true,则认为是相同的key 1.    HashMap概

treegrid-Ext.ux.tree.TreeGrid的默认排序如何改为中文?

问题描述 Ext.ux.tree.TreeGrid的默认排序如何改为中文? 我用Ext的treeGrid,它的排序默认是英文的,是这样的效果"sortAscText.sortDescText.columnsText",如何将这个改为中文显示,效果是"正序排列.倒序排列.显示/隐藏列"? 求大神解答.

java-关于Java的默认运行方法的机制问题。

问题描述 关于Java的默认运行方法的机制问题. timer.schedule(new MyTask()01000);这一句代码中,new了一个MyTask()的类,怎么就自动调用了里面的run()函数?新手勿喷. 解决方案 timer在到了那个指定时刻,它会反过来调用run,这是约定好的. 解决方案二: 这是类似于回调的机制吗?

Win8.1高效自定义应用程序默认排序

在全新的Windows8.1或Windows RT操作系统中,程序菜单完全颠倒了Windows 7等旧系统的模式,程序菜单中显示的是用户安装的所有程序包括Metro应用和桌面程序.在众多的Metro应用和桌面程序包围的桌面中,用户很难寻找到自己需要启动的应用程序. 图1 微软Windows 8.1操作系统 虽然微软在Windows 8.1中加入了强劲的搜索功能和按照类别.名称.安装日期.使用频率来分类显示应用程序,但是我们还是可以通过一些简单的设置来自定义应用程序的默认排序方式,来达到高效的工作

Java中自然排序和比较器排序详解_java

前言 当指执行插入排序.希尔排序.归并排序等算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样的比较方式,但当我们对多个对象进行排序时,如何比较两个对象的"大小"呢?这样的比较 stu1 > stu2 显然是不可能通过编译的.为了解决如何比较两个对象大小的问题,JDK提供了两个接口 java.lang.Comparable 和 java.util.Comparator . 一.自然排序:java.lang.Comparable C

sql server 2008-如何修改数据库默认排序为降序

问题描述 如何修改数据库默认排序为降序 请教一个问题 以前做的一个东西 查询数据没用order by : 查询出来的数据是按主键 升序排的 现在想改成 按另外一个字段降序排 由于丢失源码 能在数据库里修改吗 尝试新建 视图 索引 均无效 SQLSERVER 2008 解决方案 在管理器中选中数据库,右键-->属性-->选项,右边第一个就是排序规则 解决方案二: http://m.blog.csdn.net/blog/lichxi1002/19611227 解决方案三: 楼上的兄弟 你说的这个我

magento -- 产品列表的产品自定义顺序以及修改默认排序后的变化

magento的产品添加的某个分类后,可以对这个分类下的产品的显示顺序做排序,用后台分类页->分类商品里的Position来设定各个产品的顺序,数字越小,排的越前面. 这个对于经常用分类产品来做首页的产品列表相当有用,因为首页往往只显示某个分类的几个产品,当这个分类有很多产品时,你就需要来指定哪几个产品显示在首页,甚至哪个产品放首页的第一个等等. 之前的文章提到过,magento的产品默认排序是按升序排列,也就是说先添加的产品显示在最前面,经过修改代码之后才可以让新添加的产品排前面(如何修改产品