我有以下代码
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 甚至不允许我们通过键在元素上创建指针,因为完全相同的问题 - 底层数据可以移动到内存中的另一个位置。然而,它对于切片来说效果非常好。为什么会这样呢?它到底是如何运作的?内存没有被释放是因为仍然有一个变量指向该内存吗?它与地图有何不同?
我在这里的严重怀疑是,为什么我们使用新的Double(3434.34)?我们可以直接使用hm.put("Zara",3434.34)而不是hm.put("Zara",新的Double(3434.34)?大多数初学者可能有这个疑问,我只是提高它.请不要觉得奇怪,如果它看起来像孩子一样...任何澄清这肯定会帮助像我这样的新手..
假设有一大堆范围.例如,大小为5000的集合:
[100,200],[1,59],[3,5],[70,70]...
Run Code Online (Sandbox Code Playgroud)
如何在Java中检查整数n是否有效地落入这些范围中的至少一个?
我正在尝试使用流将以下代码重构为 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) 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
值的顺序并不重要.
我正在写一个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).
这是为什么?什么可能是错的,如何解决?