有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么要将相同的值放入我的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);
}
        

对吗

以下代码用于从LinkedHashMap获取数据

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

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

上面的说法正确吗

我得到了相同的值,因为所有键的最后一个值都存储在iArryNoOfParam


共 (1) 个答案

  1. # 1 楼答案

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

    当您调用put()时,您正在LinkedHashMap中存储数组的引用。由于每次都存储相同的引用,因此只能看到上次设置的值。您希望为LinkedHashMap中的每个键存储一个新的数组引用