我正在创建一个临时变量 "temp",这样我就不会更改实际设置值,但它仍在对原始设置进行更改。为什么?
I am creating a temporary variable "temp" so that I don't change the actual set value but it still is making changes in the original set. WHY?
我有一个名为“set”的 HashSet 数组列表,为了对单个 HashSet 进行操作,我正在将 Set 的值复制到临时 HashSet“temp”,但是当我通过命令“temp.retainAll(set.get(i))" 它改变了原来的设置...请帮助我。代码如下:
public class newques {
public boolean ValidCorner(int matrix[][])
{
// Your code goes here
boolean result = false;
int r = matrix.length;
int c = matrix[0].length;
ArrayList<HashSet<Integer>> set = new ArrayList<>();
for (int i = 0; i < r; i++) {
HashSet<Integer> temp = new HashSet<>();
for (int j = 0; j < c; j++) {
if (matrix[i][j]==1) {
temp.add(j);
}
}
set.add(temp);
}
System.out.println(set);
System.out.println("Size of set is: " + set.size());
for (int i = 0; i < set.size(); i++) {
for (int j = i+1; j < set.size(); j++) {
HashSet<Integer> temp = set.get(i);
System.out.println(temp);
System.out.println(set.get(j));
temp.retainAll(set.get(j));
System.out.println(set.get(i));
System.out.println("Temp set is: " + temp);
System.out.println();
if (temp.size() % 2 == 0 && temp.size() != 0) {
result = true;
break;
}
}
}
return result;
}
}
此指令 HashSet<Integer> temp = set.get(i);
使您访问位于 set 位置“内部”的同一集合 i。这就是它修改的原因。
您必须创建一个新集合
Set<Integer> temp = new HashSet<>(set.get(i));
这样两者都会指向不同的集合。
也许以下内容有助于更深入地理解这一点:Duplicating objects in Java
我有一个名为“set”的 HashSet 数组列表,为了对单个 HashSet 进行操作,我正在将 Set 的值复制到临时 HashSet“temp”,但是当我通过命令“temp.retainAll(set.get(i))" 它改变了原来的设置...请帮助我。代码如下:
public class newques {
public boolean ValidCorner(int matrix[][])
{
// Your code goes here
boolean result = false;
int r = matrix.length;
int c = matrix[0].length;
ArrayList<HashSet<Integer>> set = new ArrayList<>();
for (int i = 0; i < r; i++) {
HashSet<Integer> temp = new HashSet<>();
for (int j = 0; j < c; j++) {
if (matrix[i][j]==1) {
temp.add(j);
}
}
set.add(temp);
}
System.out.println(set);
System.out.println("Size of set is: " + set.size());
for (int i = 0; i < set.size(); i++) {
for (int j = i+1; j < set.size(); j++) {
HashSet<Integer> temp = set.get(i);
System.out.println(temp);
System.out.println(set.get(j));
temp.retainAll(set.get(j));
System.out.println(set.get(i));
System.out.println("Temp set is: " + temp);
System.out.println();
if (temp.size() % 2 == 0 && temp.size() != 0) {
result = true;
break;
}
}
}
return result;
}
}
此指令 HashSet<Integer> temp = set.get(i);
使您访问位于 set 位置“内部”的同一集合 i。这就是它修改的原因。
您必须创建一个新集合
Set<Integer> temp = new HashSet<>(set.get(i));
这样两者都会指向不同的集合。
也许以下内容有助于更深入地理解这一点:Duplicating objects in Java