hashmap put第二次
时间: 2024-03-09 12:43:29 浏览: 139
HashMap是Java中的一个常用数据结构,它提供了一种键值对的存储方式。当我们使用HashMap的put方法进行第二次插入时,会发生以下操作:
1. 首先,HashMap会根据键的哈希值计算出对应的桶位置。
2. 如果该桶位置为空,即没有其他键值对存在,那么新的键值对将直接插入到该桶位置。
3. 如果该桶位置已经存在其他键值对,那么HashMap会遍历该桶位置上的链表或红黑树(JDK1.8之后),找到与新插入键相同的键值对。
4. 如果找到了相同的键值对,HashMap会更新该键值对的值为新插入的值。
5. 如果没有找到相同的键值对,HashMap会将新的键值对插入到链表或红黑树的末尾。
这样,通过put方法进行第二次插入时,HashMap会根据键的哈希值找到对应的桶位置,并根据链表或红黑树的特性进行插入或更新操作。
相关问题
1.下列代码的运行结果是? HashMap map = new HashMap(); map.put(“name”,null); map.put(“name”,”xiyangyang”); System.out.println(map.get(“name”));
运行结果是 "xiyangyang"。
HashMap 允许 key 为 null,所以第一次 put 操作将 null 作为 key 存入 map 中。第二次 put 操作将 "name" 作为 key 存入 map 中,对应的 value 为 "xiyangyang"。由于 key 不能重复,第二次 put 操作会覆盖第一次的操作。最后,get 方法根据 key "name" 获取对应的 value,即 "xiyangyang"。
private static Map<String, String> headers = Maps.newHashMap(); static { Map<String, String> headers = Maps.newHashMap(); headers.put("Authorization", "APPCODE a96c97b0519f49538a3e8446ff598fa4"); } 两次声明了header 两个header是一个对象吗
在这段代码中,虽然我们声明了两个名为 `headers` 的变量,但它们实际上是不同的对象。原因在于,第一个 `headers` 是类的静态字段,它可以在类的任何地方(包括静态代码块)中被访问,而第二个 `headers` 是在静态代码块中定义的局部变量,它只能在该代码块中被访问。
当我们在静态代码块中创建一个名为 `headers` 的局部变量,并将其赋值为新的 `HashMap` 对象时,这个变量只有在静态代码块中才能被访问。当静态代码块执行完毕后,这个变量就会被销毁,因此它并不会对类的静态字段 `headers` 产生影响。
因此,这里声明的两个 `headers` 变量实际上是不同的对象。如果想要将静态代码块中创建的 `headers` 对象赋值给静态字段 `headers`,需要将静态代码块中的变量赋值给类的静态字段,例如:
```
private static Map<String, String> headers = Maps.newHashMap();
static {
headers.put("Authorization", "APPCODE a96c97b0519f49538a3e8446ff598fa4");
}
```
这样,静态代码块中创建的 `Map` 对象就会被赋值给类的静态字段 `headers`,而不是创建一个局部变量。
阅读全文