java – 为什么在一个ArrayList中改变一个对象会在所有其他Array
发布时间:2020-12-15 04:46:30 所属栏目:Java 来源:网络整理
导读:我正在制作一个cpu调度模拟器(用于学校项目).我的roundRobin函数有问题.当我做c.get(i).jobTime – = 2;和c.get(i).jobTime – = 1;它影响我的其他ArrayLists,所以我不能做我的其他功能.在我调用roundRobin2之前,我的列表完全正常.为什么会这样? 例如,这是
我正在制作一个cpu调度模拟器(用于学校项目).我的roundRobin函数有问题.当我做c.get(i).jobTime – = 2;和c.get(i).jobTime – = 1;它影响我的其他ArrayLists,所以我不能做我的其他功能.在我调用roundRobin2之前,我的列表完全正常.为什么会这样?
例如,这是我的list4在roundRobin2之后的样子 清单4:[Job101 0,Job102 0,Job103 0,Job104 0,Job105 0,Job106 0] 这是我在文件中读取的方式,并将Jobs对象放入我的ArrayLists中. Scanner input = new Scanner(new File("testdata1.txt")); ArrayList<Jobs> list = new ArrayList<Jobs>(); ArrayList<Jobs> list2 = new ArrayList<Jobs>(); ArrayList<Jobs> list3 = new ArrayList<Jobs>(); ArrayList<Jobs> list4 = new ArrayList<Jobs>(); Jobs first; while(input.hasNext()) { first = new Jobs(input.next(),input.nextInt()); list.add(first); list2.add(first); list3.add(first); list4.add(first); } input.close(); 这是我的roundRobin2 public void roundRobin2(ArrayList<Jobs> c,int sT) { int size = c.size(); int cT = 0; int ccT = 0; while(!c.isEmpty()) { int i = 0; System.out.println(c); for(i = 0; i < size; i++) { if((c.get(i).jobTime) >= 2) { c.get(i).jobTime -= 2; cT += 2; if((c.get(i).jobTime) == 0) { ccT += cT; } } else { (c.get(i).jobTime) -= 1; cT += 1; if((c.get(i).jobTime) == 0) { ccT += cT; } } } for(i = 0; i < size; i++) { if((c.get(i).jobTime) == 0) { c.remove(i); size = c.size(); } } } System.out.println("nAverage completion times: " + ccT + "/" + sT + " = " + ((ccT)/sT)); } 解决方法
在每次迭代中,您只创建一个对象并将其添加到所有4个列表中.当你改变那个对象时,你可以改变它.该突变将反映在所有列表中,因为它们都存储相同的对象引用.
while(input.hasNext()) { first = new Jobs(input.next(),input.nextInt()); list.add(first); list2.add(first); list3.add(first); list4.add(first); } 相反,您需要为每个列表添加一个新的对象引用(如果您希望将对象的克隆存储在每个列表中). while(input.hasNext()) { String s = input.next(); int i = input.nextInt(); list.add(new Jobs(s,i)); list2.add(new Jobs(s,i)); list3.add(new Jobs(s,i)); list4.add(new Jobs(s,i)); } 在第一个代码示例list.get(n)== list2.get(n)将为true(对于任何有效的n和来自4的任何两个列表都是true).在第二个示例中,它将是错误的,因为您现在拥有完全不相关的对象,恰好在它们添加到列表的位置存储相同的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |