在创建的哈希图中,不同键的值存在问题。不知何故,这些值被最新的附加值所覆盖。
例如:
map.put("String1", "123")
map.put("String2", "456")
System.out.println(map.get("String1")); //would print 456
我的哈希图是:
Map<String, Testing> systems = new HashMap<>();
测试:
class Testing {
private double[] ap;
private double[] dcg;
private double[] ndcg;
public Testing(double[] _ap, double[] _dcg, double[] _ndcg){
ap = _ap;
dcg = _dcg;
ndcg = _ndcg;
}
public double[] getAp(){
return ap;
}
public double[] getDcg(){
return dcg;
}
public double[] getNdcg(){
return ndcg;
}
}
这是问题所在(f是文件):
systems.put(f.getName(), new Testing(ap, dcg, ndcg));
if(f.getName().equals("input.Flab9atdnN.gz") ||
f.getName().equals("input.apl9lt.gz")) {
System.out.println(f.getName() + ": " +
systems.get(f.getName()).getAp()[5]);
}
if(f.getName().equals("input.Flab9atdnN.gz")) {
System.out.println(f.getName().equals("input.Flab9atdnN.gz"));
double temp = systems.get("input.apl9lt.gz").getAp()[5];
double temp2 = systems.get("input.Flab9atdnN.gz").getAp()[5];
System.out.println("input.Flab9atdnN.gz: " + temp2 + ". input.apl9lt.gz:
" + temp);
}
第一次打印为键“ input.Flab9atdnN.gz”和键“ input.apl9lt.gz”给出了不同的值。
System.out.println(f.getName() + ": " + systems.get(f.getName()).getAp()
[5]);
最后一个打印语句为键“ input.Flab9atdnN.gz”赋予相同的值,但为键“ input.Flab9atdnN.gz”赋予键“ input.apl9lt.gz”的值。在键“ input.apl9lt.gz”之后将键“ input.Flab9atdnN.gz”添加到哈希图中,因此在键“ input.Flab9atdnN.gz”之后添加的任何内容也将使新键值也变为“ input.Flab9atdnN.gz”
double temp = systems.get("input.apl9lt.gz").getAp()[5];
double temp2 = systems.get("input.Flab9atdnN.gz").getAp()[5];
System.out.println("input.Flab9atdnN.gz: " + temp2 + ". input.apl9lt.gz: " +
temp);
这是为什么的任何线索,以及任何可能的解决方法?我尝试对列表执行类似操作,但遇到了相同的问题。我也尝试不使用测试。
谢谢。
编辑(用于输入):
input.apl9lt.gz
0.160837098024862 0.03075251487336594 0.22437008086531643 0.1971910732696186 0.26775040012743095 9.256258391747239E-4 0.1348288884102969 0.04098977989693765 0.22076261792825694 0.14351330413359978 0.4326923076923077 0.07127127472804279 4.552325182365065E-5 0.010058991520632703 0.013241228159087674 0.010137295467368818 0.16308220490382738 0.013974532767649097 0.1591821903406855 0.03546054590978735 0.017811035142771457 0.09931683119953653 0.0012300123001230013 3.2100667693888034E-5 0.13463869607114665 0.056660951442691745 0.009024064171122994 0.00111158621285874 0.19147531389263409 6.058415656054187E-4 0.15122464967762936 0.017945455244915694 0.24100308685261787 6.295914132164171E-4 0.41666666666666663 0.16054778554778554 0.12606805722666745 0.03122700118062138 0.05840908368719257 0.06151876506910154 8.167932696234583E-5 0.48663786619303134 0.0017420658249683476 0.20520161886380303 7.111269849728675E-5 0.1157176972265951 0.28587824256374156 0.032836748137528377 0.04182754182754183 0.02944176265259386
input.Flab9atdnN.gz
0.4550531747779656 0.11354712610736152 0.4465970245283123 0.39990864084973815 0.23410193071725469 8.08015513897867E-5 0.11287817139653589 0.02255268670973833 0.30038335608865446 0.21267974099603318 0.6041666666666666 0.15726821262566176 0.15690222729126874 1.5053439710973956E-4 0.0843584401155248 0.5027027027027027 0.1873237718924946 0.005660813678763912 0.012321170992537366 0.0529994153272247 0.04489848129896188 0.016508461433080466 0.0 1.0736065674698058053E-4 0.07164253590778259 0.14083889573189318 0.024676040805073064 0.16099898114516484 0.16509562037628656 0.06488409960391041 0.22263263699157246 0.0568843663526689 0.4175364417422477 0.1106842493991619 0.15555555555555556 0.5416666666666666 0.4654817731306396 0.0930344930767678 0.344114561968089 0.1882981402539536 0.11698973634619976 0.4533746137676584 0.3389765988389732 0.475199277730597 0.08708693608991427 0.34790332410690694 0.035929746042875826 0.08056424630498706 0.20352743561030237 0.12758565977230674
将它们读入双精度数组(大小为50)。要使用Testing类,只需删除dcg和ndcg。
答案 0 :(得分:2)
首先:
import java.util.HashMap;
public class MapPutExample {
public final static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("String1", "123");
map.put("String2", "456");
System.out.println(map.get("String1")); //would print 456
}
}
打印
123
所以:不,不是。
您尚未提供实际的代码,我们可以在其中看到如何向地图添加元素,但是鉴于Testing
包含数组这一事实,我想您在从设置其值时不会初始化新数组文件。因此,您需要执行以下操作:
import java.util.HashMap;
public class MapPutExample {
public final static void main(String[] args) throws Exception {
HashMap<String, char[]> map = new HashMap<>();
char[] buffer = new char[10];
for (int i = 0; i < buffer.length; i++) {
buffer[i] = (char) ('a' + i);
}
map.put("String1", buffer);
for (int i = 0; i < buffer.length; i++) {
buffer[i] = (char) ('k' + i);
}
map.put("String2", buffer);
System.out.println(map.get("String1")); //would print klmnopqrst
}
}
这实际上打印
klmnopqrst
您需要创建新数组并将其设置为添加到地图的Testing
实例:
import java.util.HashMap;
public class MapPutExample {
public final static void main(String[] args) throws Exception {
HashMap<String, char[]> map = new HashMap<>();
char[] buffer = new char[10];
for (int i = 0; i < buffer.length; i++) {
buffer[i] = (char) ('a' + i);
}
map.put("String1", buffer);
buffer = new char[10];
for (int i = 0; i < buffer.length; i++) {
buffer[i] = (char) ('k' + i);
}
map.put("String2", buffer);
System.out.println(map.get("String1")); //would print klmnopqrst
}
}
这是打印
abcdefghij