Java 当我将随机生成的值放入数组时,为什么它们是相同的?

Java 当我将随机生成的值放入数组时,为什么它们是相同的?,java,arrays,random,Java,Arrays,Random,为什么随机生成的值在数组中是相同的 在调试模式下查看时,我看到ArrayList中的值是相同的 谁能解释一下吗 public class CreateRandomSet { public static void main(String[] args) throws IOException { Map<String, ArrayList<String>> randomSet = new HashMap<String, ArrayList<

为什么随机生成的值在数组中是相同的

在调试模式下查看时,我看到
ArrayList
中的值是相同的

谁能解释一下吗

public class CreateRandomSet {
    public static void main(String[] args) throws IOException {
        Map<String, ArrayList<String>> randomSet = new HashMap<String, ArrayList<String>>();
        ArrayList<String> storeData = new ArrayList<String>();
        String fileName = "file.txt";
        FileReader fileReader = new FileReader(fileName);
        BufferedReader bf = new BufferedReader(fileReader);
        String line = bf.readLine();
        String storeId;
        String storeName;
        String customer;
        String value;
        Random random = new Random();
        double randomValue;
        double start = 100;
        double end = 10000;
        while(line != null){
            storeData.clear();
            line = line.trim();
            CsvTokenizer csvTokenizer = new CsvTokenizer(line, ",");
            storeId = csvTokenizer.nextToken();
            if(csvTokenizer.hasMoreTokens()){
                storeName = csvTokenizer.nextToken();
                storeData.add(storeName);
            }
            if(csvTokenizer.hasMoreTokens()){
                value= csvTokenizer.nextToken();
                randomValue = end + (start * random.nextDouble()) ;
                storeData.add(String.valueOf(randomValue));
            }

            randomSet.put(storeId, storeData);
            line = bf.readLine();
        }
    }
}
公共类CreateRandomSet{
公共静态void main(字符串[]args)引发IOException{
Map randomSet=新的HashMap();
ArrayList storeData=新的ArrayList();
字符串fileName=“file.txt”;
FileReader FileReader=新的FileReader(文件名);
BufferedReader bf=新的BufferedReader(文件读取器);
String line=bf.readLine();
字符串存储ID;
字符串storeName;
串客户;
字符串值;
随机=新随机();
双随机值;
双启动=100;
双端=10000;
while(行!=null){
storeData.clear();
line=line.trim();
CsvTokenizer CsvTokenizer=新的CsvTokenizer(行“,”);
storeId=csvTokenizer.nextToken();
if(csvTokenizer.hasMoreTokens()){
storeName=csvTokenizer.nextToken();
storeData.add(storeName);
}
if(csvTokenizer.hasMoreTokens()){
value=csvTokenizer.nextToken();
randomValue=end+(start*random.nextDouble());
添加(String.valueOf(randomValue));
}
randomSet.put(storeId、storeData);
line=bf.readLine();
}
}
}

您只有一个
storeData
实例,可以将其用作地图所有键的值。因此,在最终迭代中添加到该
列表中的值就是您看到的地图所有关键点的值

您必须在循环的每个迭代中创建一个新的
列表

更改:

storeData.clear();
致:

storeData=newarraylist();

但是为什么
clear()
根本不清除数组?我希望在使用
clear()
方法后,我的数组将为空。@Andrew当然会清除列表。但是地图中的所有值都引用同一个ArrayList对象,因此它会清除所有值。并且您在上一次迭代中添加的值不会被清除。
storeData = new ArrayList<>();