Java中的HashMap,为什么输出竟然是有序的
发布网友
发布时间:2022-04-17 08:53
我来回答
共3个回答
懂视网
时间:2022-04-17 13:14
hashmap是无序的,无序是指混乱无规则的状态,无序的种类和特征可以根据晶体结构被破坏的方式和程度来定义,通常的无序现象包括置换无序,取向无序,晶畴无序,拓扑无序等。
HashMap是一种无序的存储结构。HashMap的实现是假定元素是放在一个圆形的环上,每次put进来的元素根据其hashCode计算该元素在圆环上索引,把该元素放到合适的位置。基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。
热心网友
时间:2022-04-17 10:22
你是遇到巧合了吧,例如使用如下代码输出:
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
for (int i = 0; i < 10; i++) {
map.put(i + "", i + "");
}
for (String key : map.keySet()) {
System.out.println(key);
}
}
但是你再试试下面这段代码输出就和输入顺序不一致了:
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
for (int i = 8; i < 15; i++) {
map.put(i + "", i + "");
}
for (String key : map.keySet()) {
System.out.println(key);
}
}
前面之所以有序是因为这些key通过哈希后也是连续的,遍历时就变成有顺序了。
热心网友
时间:2022-04-17 11:40
HashMap输出的无序的,因为哈希算法存值和取值的时候没有顺序性。 想做到先进先出,之类的顺序。要用 LinkedHashMap 或TreeMap
hashmap 是无序的但是实际输出有序。
HashMap的无序是指不会记录插入的顺序,也不会根据特定规则进行排序;但是HashMap存值的时候会根据key的hashCode()来计算存储的位置(位置是散列的,所以说其无序);你使用的key是String类型,String重写的hashCode()计算出的位置,遍历的时候恰好是"001","003","005"的顺序;PS:你可以打印一下"0...
Java中的HashMap,为什么输出竟然是有序的
}}前面之所以有序是因为这些key通过哈希后也是连续的,遍历时就变成有顺序了。
hashmap是无序的吗?
hashmap是无序的。HashMap 是 Java 中的一种常用数据结构,用于存储键值对。在 Java 8 之前,HashMap 是无序的,也就是说,它不保证元素的存储顺序与插入顺序一致。但是从 Java 8 开始,HashMap 开始提供一种特殊的实现——LinkedHashMap,它可以保持元素的插入顺序。下面将详细解释HashMap的有序性。
hashmap有序还是无序
hashmap是无序的,无序是指混乱无规则的状态,无序的种类和特征可以根据晶体结构被破坏的方式和程度来定义,通常的无序现象包括置换无序,取向无序,晶畴无序,拓扑无序等。HashMap是一种无序的存储结构。HashMap的实现是假定元素是放在一个圆形的环上,每次put进来的元素根据其hashCode计算该元素在圆...
JAVA中的map集合顺序如何与添加顺序一样
你用的是hashmap吧,HashMap是没有顺序的,如果你一定要让它有顺序,可以去实现排序接口,具体是哪个我忘了,不过你可以用TreeMap,这个集合是有序的,和添加顺序一样。
Java中HashMap和TreeMap的区别深入理解
HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。 HashMap 非线程安全 TreeMap 非线程安全 线程安全 在Java里,线程安全一般体现在两个方面: 1、多个thread对同一个java实例的访问(...
关于java中HasMap的遍历输出不按顺序
第一种:能顺序遍历就用ArrayList第二种:先把hashMap的key 拿出来 然后把key 排序,通过HashMap的get(String key) 方法取出值 就好了
Java中的HashMap加入元素时,是否可以根据自己定义的顺序加入元素得到自 ...
首先HashMap是无序的,想要有序可以用TreeMap,加入元素后自行排序,但是Map是键值对,它就算排序也是按key排序的,和元素没关系,如果你期望的是元素的排序,建议使用TreeSet,建立TreeSet的时候指定一个comparator.如果确定可以使用TreeSet你可以追问,如果不用,HashMap不能排序这是你要的答案 ...
java中,怎么样得到一个有序的map集合?
hashmap是没有顺序的,有顺序的一般没人这么用的,都是通过list来进行确定顺序的对象添加的。因为list是有顺序的,先add的编号就小(从0开始),举例: List list = new linkedList(); list.add("0"); list.add("1"); 结果就是:list.get(1) =1;...
关于java中HasMap的遍历输出不按顺序
你没理解HashMap的本质,HashMap的存储是使用hash值算位置的,并不是像数组那样放到指定的位置。