java - vector总是有相同的结果

时间:2011-09-28 09:23:20

标签: java vector

我读了一个.ini文件并将每个属性放入一个临时数组中,最后我把它放到一个向量中 - 直到这里工作正常。

但是如果我想访问该向量中的每个数组,我总是得到相同的结果,这是不可能的。我尝试了不同的方式,不同的循环和一切不同,但总是相同的结果,这是我的实际代码:

    tmp2 = new String[2];
    for(Enumeration e=allPropertys.elements(); e.hasMoreElements();) {
        tmp2 = (String[])e.nextElement();
        for(int i = 0; i < tmp2.length; i++)
        {
            System.out.println(tmp2[i]);
        }
    }

以下是我将所有内容放入向量的代码:

    try {
        tmp = new String[2];

        prop = new Properties();
        prop.load(new FileReader("konfig.ini"));

        Enumeration e = prop.propertyNames();
        while (e.hasMoreElements()) {

            String key = (String)e.nextElement();
            String value = prop.getProperty( key );
            tmp[0] = key + " " +  value;
            tmp[1] = value;

            System.out.println("Property: " + tmp[0] + " und Value: " + tmp[1]);
            allPropertys.add(tmp);
        }
    }

2 个答案:

答案 0 :(得分:6)

我的猜测是,当你填充向量时,你会为每个属性重用相同的字符串数组。这使得向量包含10次(10为条目数)相同的数组:

String[] property = new String[2];
for (every line in the file) {
    property[0] = ...;
    property[1] = ...;
    vector.add(property);
}

这应该替换为

for (every line in the file) {
    String[] property = new String[2];
    property[0] = ...;
    property[1] = ...;
    vector.add(property);
}

另外,请注意在您的代码段中,您创建了一个新的String数组来初始化您的tmp2变量,然后将其值替换为向量中的值。初始化是不必要的。

答案 1 :(得分:0)

您正在替换数组中的值,并将一遍又一遍的数组放入集合中。

您必须了解对象和数组的工作原理。你认为将它添加到集合中会复制它(这就是为什么你在读取部分循环之前初始化数组的原因,我认为)。它只添加了参考。你总是使用参考文献。

每次要添加它时,都必须创建一个新数组。将数组变量(或任何对象变量)视为对象的引用。作为真实的箭头。将它添加到矢量时,您将箭头添加到内存中的相同结构(相同的两个桶)。