我想弄清楚HashMap中的值被/可以被检索的顺序。这是相同的代码段。
import java.util.HashMap; public class HashMapExample { public static void main(String[] args) { HashMap<Integer, String> hashmap = new HashMap<Integer, String>(); hashmap.put(1, "apple" ); hashmap.put(2, "lemon" ); hashmap.put(3, "orange" ); hashmap.put(4, "banana" ); hashmap.put(5, "litchi" ); hashmap.put(6, "mango" ); hashmap.put(7, "papaya" ); System.out.println(hashmap.size()); for (String key : hashmap.values()) { System.out.println(key); } } }
输出:
7 apple lemon orange banana litchi mango papaya
值按插入顺序打印。这是真的吗?我期望值将以任意顺序打印。这是使用Java 6。
值按插入顺序打印。这是真的吗?我期望值将以随机顺序打印。
该HashMapAPI没有定义迭代的顺序。
HashMapAPI
但是,如果查看HashMap的实现,则可以推断出迭代顺序,键的哈希值,键的插入顺序和哈希表的大小之间存在复杂的过渡关系。如果哈希表自行调整大小,则此关系会变得混乱。
在您的情况下,您正在使用Integer键,这意味着键的哈希值本身就是键值。另外,您按键顺序插入了条目。这(幸运地!)导致匹配插入顺序的迭代顺序。但是,如果您继续插入更多的键,则会发现迭代顺序“环绕”。然后,当表格经过一系列调整大小时,顺序将变得越来越混乱。
Integer
简而言之,您看到的只是哈希表实现的伪像,而不是您可以(或应该)明智地利用的东西。尤其重要,因为它可以从一个Java版本更改为另一个Java版本。