Java 为什么我需要多次创建数组?
此程序成对地洗牌源列表。原来的名单 “1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”、“19”、“20” 转移到 11^12 19^20 17^18 15^16 1^2 5^6 3^4 13^14 7^8 9^10 当注释行未注释时,上述情况属实。现在,如果注释了行A,则shuffleList中的所有元素都是Java 为什么我需要多次创建数组?,java,Java,此程序成对地洗牌源列表。原来的名单 “1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”、“19”、“20” 转移到 11^12 19^20 17^18 15^16 1^2 5^6 3^4 13^14 7^8 9^10 当注释行未注释时,上述情况属实。现在,如果注释了行A,则shuffleList中的所有元素都是19^20 public class ShuffleService { pu
19^20
public class ShuffleService {
public static void shuffleList(List<String> list) {
System.out.println(list);
ArrayList<String[]> shuffleList = new ArrayList<String[]>(10);
String[] arr = new String[2];
boolean flag = false;
int step = 0;
for(String s: list){
if(flag){
arr[1]=s;
} else {
arr[0]=s;
}
flag=!flag;
step++;
if(step==2){
shuffleList.add(arr);
step=0;
//arr = new String[2]; //**line A**
}
}
Collections.shuffle(shuffleList);
for(String[] val: shuffleList){
System.out.print(val[0]);
System.out.print("^");
System.out.println(val[1]);
}
}
public static void main(String[] args) {
String[] a = new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"};
List<String> list1 = Arrays.asList(a);
shuffleList(list1);
}
}
公共类ShuffleService{
公共静态无效随机列表(列表){
系统输出打印项次(列表);
ArrayList shuffleList=新的ArrayList(10);
字符串[]arr=新字符串[2];
布尔标志=假;
int步长=0;
用于(字符串s:列表){
国际单项体育联合会(旗){
arr[1]=s;
}否则{
arr[0]=s;
}
flag=!flag;
step++;
如果(步骤==2){
shufflist.add(arr);
步长=0;
//arr=新字符串[2];//**行A**
}
}
收藏。洗牌(洗牌列表);
for(字符串[]val:shuffleList){
系统输出打印(val[0]);
系统输出打印(“^”);
System.out.println(val[1]);
}
}
公共静态void main(字符串[]args){
字符串[]a=新字符串[]{“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”、“19”、“20”};
List list1=Arrays.asList(a);
沙弗利斯特(列表1);
}
}
那么,为什么我需要取消程序中A行的注释才能正常工作呢?因为当您将值重写为arr(不重新创建)时,您还将修改列表中已有的值
向列表中添加对象不会阻止您对其进行修改,它不会自行复制。通过在循环中调用
new String[2]
,可以有效地为添加到列表中的每一对创建一个新的字符串数组,这正是您所需要的。因为当您将值重写为arr
(无需重新创建)时,您还将修改列表中已有的值
向列表中添加对象不会阻止您对其进行修改,它不会自行复制。通过在循环中调用
new String[2]
可以有效地为添加到列表中的每一对创建一个新的字符串数组,这正是您所需要的。因为否则,您将通过引用修改一个对象(单数数组)的值。否则,您将修改一个对象(单数数组)的值参考。