java - 为什么相同的值会放入我的 LinkedHashMap 数组中?

标签 java arrays linkedhashmap

我正在使用LinkedHashMap与一个数组。 “放入”和“获取”值的方式是什么?

在我的LinkedHashMap<Integer, Integer[]>我有:

Key 1 -> integer array like {5,6,2,4}

Key 2 -> integer array, like {7,2,6,1}

.... goes on

这是我用来存储值的代码片段

// has to store the data as order as it is received
LinkedHashMap<Integer, Integer[]> hParamVal = new LinkedHashMap<Integer, Integer[]>();

// temprory integer array to store the number as it is received
Integer[] iArryNoOfParam = new Integer[iNoOfScalar];

for (iRow = 0; iRow < iNoOfBlocks; iRow++) {

  for (iCol = 0; iCol < iNoOfArrVal; iCol++) {

    bBuffGenStr = Arrays.copyOfRange(BuffRecv, iStartLoc, iOffset);
    GenDataVal oParamVal = dataStruct.readGenValue(bBuffGenStr);
    bBuff4GenStr = oParamVal.getValue();
    // store the integer array as received
    iArryNoOfParam[iCol] = ByteBuffer.wrap(bBuff4GenStr)
        .order(ByteOrder.LITTLE_ENDIAN).getInt();

    iStartLoc = iOffset;
  }

  // store the array of Integer to every key
  hParamVal.put(iRow, iArryNoOfParam);
}
        

hParamVal.put正确吗?

下面的代码是从LinkedHashMap获取数据

for (Integer key : hLoadSurveyParam.keySet()) {
  System.out.println(" KEY  # " + key);

  for (iCol = 0; iCol < iNoOfScalar; iCol++) {
    System.out.println(hParamVal.get(key)[iCol]);
  }
}

hParamVal.get以上说法正确的是?

我得到相同的值,因为最后的值存储在 iArryNoOfParam 中对于所有键!

最佳答案

带上这条线 Integer[] iArryNoOfParam = new Integer[iNoOfScalar]; 进入您的 for 循环。

当您调用 put() 时,您会将数组的引用存储在 LinkedHashMap 中。由于您每次都存储相同的引用,因此您只会看到最后设置的值。您想要为 LinkedHashMap 中的每个键存储一个新的数组引用。

关于java - 为什么相同的值会放入我的 LinkedHashMap 数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31564933/

相关文章:

Java RTP/HTTP 流媒体

java - 如何实现引用数据Java/DB

java - java中是否存在内部异常概念

c - 无法初始化二维数组

java - 将 EntrySet 的流收集到 LinkedHashMap

java - 如何将字符串列表转换为 LinkedHashMap?

java - WebDriver getText 抛出异常

php - 获取多维数组中特定列的所有值

c++ - 如何从 .t​​xt 文件读取 CSV 列表并将每个项目分隔到自己的数组中

java - 编辑另一个 LinkedHashMap 内 ArrayList 内 LinkedHashMap 中键的值