【问题标题】:Why do the same values get put into my LinkedHashMap Array?为什么相同的值会放入我的 LinkedHashMap 数组中?
【发布时间】:2015-07-22 13:43:41
【问题描述】:

我将LinkedHashMap 与数组一起使用。 'put' 和 'get' 值的方法是什么?

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

键 1 -> 整数数组,如 {5,6,2,4}

Key 2 -> 整数数组,如{7,2,6,1}

....继续

这是我用来存储值的代码 sn-p

// 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 中!

【问题讨论】:

  • 您正在为所有键存储相同的数组。 putget 正在按预期工作。

标签: java arrays linkedhashmap


【解决方案1】:

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

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

【讨论】:

  • @SKay 除此之外,我认为iStartLoc = iOffset; 这一行没有意义,因为您将始终复制BuffTecv 数组的同一部分。我相信你应该把那行改成iStartLoc += iOffset;
  • 感谢它正在工作。那么数组,iArryNoOfParam[1] 不能多次赋值?!
  • @Federico 这只是代码 sn-p!问题是每次都初始化数组!
猜你喜欢
  • 1970-01-01
  • 2014-02-06
  • 2014-04-06
  • 2012-04-16
  • 2015-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多