我有一个我无法理解的问题..
我正在构建HashMap called wholeSetHistory
。
我正在使用与wholeSetHistory相同的键和值构建一个HashMap,称为wholeSetHistoryT
。
以类似的方式创建了两个HashMaps called wholeSetRates, wholeSetRatesT
所有HashMaps都采用此格式HashMap<String, HashMap<String, Double>>
。
我有这个创建火车集的功能
public void createTrainSet(HashMap<String, HashMap<String, Double>> wholeSetRates, HashMap<String, HashMap<String, Double>> wholeSetHistory){
for(String fbid : wholeSetHistory.keySet()){
ArrayList<String> locsBe = new ArrayList<>();
HashMap<String, Double> locss = wholeSetHistory.get(fbid);
HashMap<String, Double> locss2 = wholeSetRates.get(fbid);
for(String loc : locss.keySet()){
if(locss.get(loc)==1.0){
locsBe.add(loc);
}
}
ArrayList<Integer> randomNums = new ArrayList<>();
for(int i=0; i<2; i++){
Random rn = new Random();
int randomNum;
do{
int range = locsBe.size() - 1 + 1;
randomNum = rn.nextInt(range);
}while(randomNums.contains(randomNum));
randomNums.add(randomNum);
locss.put(locsBe.get(randomNum), 0.0);
locss2.put(locsBe.get(randomNum), 0.0);
wholeSetHistory.put(fbid, locss);
wholeSetRates.put(fbid, locss2);
}
randomNums.clear();
}
}
所以,稍后我会像这样使用它
(... creation of wholeSetHistory, wholeSetHistoryT, wholeSetRates, wholeSetRatesT)
System.out.println(wholeSetHistory.get("1"));//1
createTrainSet(wholeSetRatings, wholeSetHistory, nearUserIDWithVisitedTrueValues);
这意味着我只将wholeSetHistory
虽然,后来我
System.out.println(wholeSetHistory.get("1"));//2
System.out.println(wholeSetHistoryT.get("1"));//3
这就是:
wholeSetHistory中更改的值也会在wholeSetHistoryT中更改! 例如,印刷品2和3是相同的(!),与1不同。
任何帮助都是mych赞赏的。
答案 0 :(得分:3)
引用指向内存中的某个位置。如果向两个不同的数据结构添加相同的引用,则在一个中更改引用也将改变另一个。它们指向内存中的同一个对象。