标签: hashmap

当 Go 将切片移动到内存中的另一个位置时,指向元素的指针会发生什么?

我有以下代码

package main

import "fmt"

func main() {
    a := []int{1}
    b := &a[0]
    fmt.Println(a, &a[0], b, *b) // prints [1] 0xc00001c030 0xc00001c030 1

    a = append(a, 1, 2, 3)
    fmt.Println(a, &a[0], b, *b) // prints [1 1 2 3] 0xc000100020 0xc00001c030 1
}
Run Code Online (Sandbox Code Playgroud)

首先它创建一个 1 int 的切片。它的 len 是 1,cap 也是 1。然后我获取一个指向它的第一个元素的指针,并在 print 中获取底层指针值。正如预期的那样,它工作得很好。

然后我向切片中添加 3 个元素,从而扩展切片的容量,从而将其复制到内存中的另一个位置。之后,我打印切片第一个元素的地址(通过获取指针),该地址现在与存储在b.

但是,当我打印它的基本值时,它b也可以正常工作。我不明白为什么它有效。据我所知,第一个元素指向的切片b已复制到内存中的另一个位置,因此它之前的内存肯定已被释放。然而,它似乎仍然存在。

如果我们查看映射,golang 甚至不允许我们通过键在元素上创建指针,因为完全相同的问题 - 底层数据可以移动到内存中的另一个位置。然而,它对于切片来说效果非常好。为什么会这样呢?它到底是如何运作的?内存没有被释放是因为仍然有一个变量指向该内存吗?它与地图有何不同?

memory pointers hashmap go slice

-4
推荐指数
1
解决办法
423
查看次数

在hashmap中,hm.put是什么意思("Zara",new Double(3434.34));

我在这里的严重怀疑是,为什么我们使用新的Double(3434.34)?我们可以直接使用hm.put("Zara",3434.34)而不是hm.put("Zara",新的Double(3434.34)?大多数初学者可能有这个疑问,我只是提高它.请不要觉得奇怪,如果它看起来像孩子一样...任何澄清这肯定会帮助像我这样的新手..

java collections jsp hashmap

-5
推荐指数
1
解决办法
238
查看次数

如何检查整数是否在给定范围的集合中?

假设有一大堆范围.例如,大小为5000的集合:

[100,200],[1,59],[3,5],[70,70]...
Run Code Online (Sandbox Code Playgroud)

如何在Java中检查整数n是否有效地落入这些范围中的至少一个?

java algorithm hashmap data-structures

-5
推荐指数
1
解决办法
80
查看次数

如何从java 8中的hashmap获取值

我正在尝试使用流将以下代码重构为 java8。我如何获得哈希图中任何特定键的值 请提出建议。

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class HashMapUtility {

public static void main(String[] args) {
    Map<String, List<Integer>> map = new HashMap<>();
    map.put("key1", Arrays.asList(1, 2, 3, 4));
    map.put("key2", Arrays.asList(4, 5, 6, 7));
    map.put("key3", Arrays.asList(8, 9, 10, 11));
    map.put("key4", Arrays.asList(12, 13, 14, 15));

    /*how to write it in JAVA8*/
    for (Map.Entry<String, List<Integer>> mapIter : map.entrySet()) {
        List<Integer> li = mapIter.getValue();
        for (Integer num : li) {
            if (num % 2 == 0) {
                System.out.println(num);
            }
        } …
Run Code Online (Sandbox Code Playgroud)

java hashmap java-stream

-5
推荐指数
1
解决办法
114
查看次数

如何在java中打印HashMap中键的所有值

Map<String, String> map = new HashMap<String, String>();
map.put("1", "xyz");
map.put("1", "abc");
map.put("1", "cde");
map.put("2", "err");`
Run Code Online (Sandbox Code Playgroud)

`

对于上面的地图,我想获得与密钥相关的所有值1.预期输出.

Key :: 1值是:: xyz,abc,cde

值的顺序并不重要.

java hashmap

-6
推荐指数
2
解决办法
5万
查看次数

将null值放入HashMap是不可能的

我正在写一个Android应用程序并使用HashMap<String,MyClass>.根据Java和Android文档,HashMap应该接受空键和值.但是,奇怪的是,我不能将null值放入我的地图中.在代码中:

myMap.put(1, null);
Run Code Online (Sandbox Code Playgroud)

我收到错误:

The method put(String, MyClass) in the type HashMap<String,MyClass> is not applicable for the arguments (int, null).

这是为什么?什么可能是错的,如何解决?

java null android hashmap

-8
推荐指数
2
解决办法
2万
查看次数