java - 替换树状图中特定键的值会更改每个键的值

标签 java collections treemap

出于某种原因,当我更改树形图中特定键的值时,每个键值都会因某种原因而更改。这是代码片段,

ArrayList<Integer> bitor = new ArrayList<>();
TreeMap<Integer, ArrayList> a = new TreeMap<>();
for(int i=0; i<4; i++)
    bitor.add(0);
for(int i=0; i<n; i++)
{
    a.put(i, bitor);
}
System.out.println(a);
for(int i=0; i<n; i++)
{
    x = i;
    for(int j=0; j<n; j++)
    {
        if(x!=j)
        {
            y = j;
            for(int k=0; k<n; k++)
            {
                if(x!=k && y!=k)
                {
                    z = k;
                    System.out.println(a);
                    bitor = a.get(x);
                    if(bitor.get(0)==3)
                        break;
                    System.out.println(1+" "+x+" "+y+" "+z);
                    System.out.flush();
                    bitor.set(0, bitor.get(0)+1);
                    ans = sc.nextInt();
                    if(ans==-1)
                        System.exit(ans);
                    bitor.set(bitor.get(0), ans);
                    a.replace(x, bitor);
                }
                if(bitor.get(0)==3)
                    break;
            }
        }
    }
}

Output image

只有 key=0 的数组列表值应该更改,但每个键值都更改了。

这有点奇怪,我猜我犯了一个愚蠢的错误。

最佳答案

for(int i=0; i<n; i++)
{
    a.put(i, bitor);
}

这并不像你想象的那样。每个键都指向相同的值。您必须为每个i显式创建一个新的bitor

关于java - 替换树状图中特定键的值会更改每个键的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53767168/

相关文章:

java - 比较命令行参数引用返回 false 而字符串数组返回 true

java - map 的封装实现

objective-c - 如何在 iOS/Cocoa 中找到集合对象的内存占用

java - Google Guava TreeMultimap - 根据排序顺序检索值?

java - 通过防火墙或 NAT 进行双向异步调用和回调的 RMI 替代方案

java - JUnit 不会在 Eclipse 中的断点处停止(使用 JDK 1.6.0.20)

java - "Linked"是什么意思?

java - 使用值和时间优先级(如果相等)对 LinkedHashMap 进行排序

r - 在ggplot2中使用圆形包装可视化分层数据?

java - 从 src/groovy 中的 spock 单元测试测试代码访问 grailsApplication