Java 如何从集合中删除数组?
我有一个整数[]的集合,我想从中删除一些元素,但通常的删除方法似乎不起作用。 除了迭代和比较Integer[]的每个元素之外,还有其他解决方法吗。 下面是这个问题的测试代码Java 如何从集合中删除数组?,java,collections,Java,Collections,我有一个整数[]的集合,我想从中删除一些元素,但通常的删除方法似乎不起作用。 除了迭代和比较Integer[]的每个元素之外,还有其他解决方法吗。 下面是这个问题的测试代码 import java.util.ArrayList; import java.util.List; public class Test { public static void main(String args[]){ List<Integer[]> subSet = new Ar
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String args[]){
List<Integer[]> subSet = new ArrayList<Integer[]>();
subSet.add(new Integer[]{0,1,2,3,4});
subSet.add(new Integer[]{0,1,2,3,5});
subSet.add(new Integer[]{0,0,0,0,0});
//prune this collection by removing an Integer[]
Integer[] elementToRemove = {0,0,0,0,0};
System.out.println( "Before " + subSet.size());
subSet.remove(elementToRemove);
System.out.println( "After " + subSet.size());
//
}
}
import java.util.ArrayList;
导入java.util.List;
公开课考试{
公共静态void main(字符串参数[]){
列表子集=新的ArrayList();
add(新整数[]{0,1,2,3,4});
add(新整数[]{0,1,2,3,5});
add(新整数[]{0,0,0,0});
//通过删除整数[]来修剪此集合
整数[]elementToRemove={0,0,0,0};
System.out.println(“Before”+subSet.size());
子集。删除(元素删除);
System.out.println(“在”+subSet.size()之后);
//
}
}
使用迭代器肯定是可能的。由于数组不重写等于
,因此需要静态数组
方法
public static void main(String args[]){
List<Integer[]> subSet = new ArrayList<Integer[]>();
subSet.add(new Integer[]{0,1,2,3,4});
subSet.add(new Integer[]{0,1,2,3,5});
subSet.add(new Integer[]{0,0,0,0,0});
//prune this collection by removing an Integer[]
Integer[] elementToRemove = {0,0,0,0,0};
System.out.println( "Before " + subSet.size());
//get your Integer[] iterator
Iterator<Integer[]> it = subSet.iterator();
//for each element in the array
while(it.hasNext()){
//check if it is equal to the elementToRemove
if(Arrays.equals(it.next(), elementToRemove)){
//remove it
it.remove();
}
}
System.out.println( "After " + subSet.size());
}
publicstaticvoidmain(字符串参数[]){
列表子集=新的ArrayList();
add(新整数[]{0,1,2,3,4});
add(新整数[]{0,1,2,3,5});
add(新整数[]{0,0,0,0});
//通过删除整数[]来修剪此集合
整数[]elementToRemove={0,0,0,0};
System.out.println(“Before”+subSet.size());
//获取整数[]迭代器
迭代器it=subSet.Iterator();
//对于数组中的每个元素
while(it.hasNext()){
//检查它是否等于元素ToRemove
if(Arrays.equals(it.next(),elementToRemove)){
//移除它
it.remove();
}
}
System.out.println(“在”+subSet.size()之后);
}
使用迭代器肯定是可能的。由于数组不重写等于
,因此需要静态数组
方法
public static void main(String args[]){
List<Integer[]> subSet = new ArrayList<Integer[]>();
subSet.add(new Integer[]{0,1,2,3,4});
subSet.add(new Integer[]{0,1,2,3,5});
subSet.add(new Integer[]{0,0,0,0,0});
//prune this collection by removing an Integer[]
Integer[] elementToRemove = {0,0,0,0,0};
System.out.println( "Before " + subSet.size());
//get your Integer[] iterator
Iterator<Integer[]> it = subSet.iterator();
//for each element in the array
while(it.hasNext()){
//check if it is equal to the elementToRemove
if(Arrays.equals(it.next(), elementToRemove)){
//remove it
it.remove();
}
}
System.out.println( "After " + subSet.size());
}
publicstaticvoidmain(字符串参数[]){
列表子集=新的ArrayList();
add(新整数[]{0,1,2,3,4});
add(新整数[]{0,1,2,3,5});
add(新整数[]{0,0,0,0});
//通过删除整数[]来修剪此集合
整数[]elementToRemove={0,0,0,0};
System.out.println(“Before”+subSet.size());
//获取整数[]迭代器
迭代器it=subSet.Iterator();
//对于数组中的每个元素
while(it.hasNext()){
//检查它是否等于元素ToRemove
if(Arrays.equals(it.next(),elementToRemove)){
//移除它
it.remove();
}
}
System.out.println(“在”+subSet.size()之后);
}
试试这个解决方案,效果很好:
整数数组类:
public class IntegerArray {
public final Integer[] array;
public IntegerArray(Integer... array) {
this.array = array;
}
@Override
public boolean equals(Object o) {
if (o instanceof IntegerArray) {
return Arrays.equals(this.array, ((IntegerArray) o).array);
}
return false;
}
}
public class Test {
public static void main(String args[]){
List<IntegerArray> subSet = new ArrayList<IntegerArray>();
subSet.add(new IntegerArray(0,1,2,3,4));
subSet.add(new IntegerArray(0,1,2,3,5));
subSet.add(new IntegerArray(0,0,0,0,0));
//prune this collection by removing an Integer[]
IntegerArray elementToRemove = new IntegerArray(0,0,0,0,0);
System.out.println( "Before " + subSet.size());
subSet.remove(elementToRemove);
System.out.println( "After " + subSet.size());
}
}
测试类:
public class IntegerArray {
public final Integer[] array;
public IntegerArray(Integer... array) {
this.array = array;
}
@Override
public boolean equals(Object o) {
if (o instanceof IntegerArray) {
return Arrays.equals(this.array, ((IntegerArray) o).array);
}
return false;
}
}
public class Test {
public static void main(String args[]){
List<IntegerArray> subSet = new ArrayList<IntegerArray>();
subSet.add(new IntegerArray(0,1,2,3,4));
subSet.add(new IntegerArray(0,1,2,3,5));
subSet.add(new IntegerArray(0,0,0,0,0));
//prune this collection by removing an Integer[]
IntegerArray elementToRemove = new IntegerArray(0,0,0,0,0);
System.out.println( "Before " + subSet.size());
subSet.remove(elementToRemove);
System.out.println( "After " + subSet.size());
}
}
公共类测试{
公共静态void main(字符串参数[]){
列表子集=新的ArrayList();
添加(新的整数数组(0,1,2,3,4));
添加(新的整数数组(0,1,2,3,5));
add(新的整数数组(0,0,0,0));
//通过删除整数[]来修剪此集合
IntegerArray elementToRemove=新的IntegerArray(0,0,0,0);
System.out.println(“Before”+subSet.size());
子集。删除(元素删除);
System.out.println(“在”+subSet.size()之后);
}
}
试试这个解决方案,效果很好:
整数数组类:
public class IntegerArray {
public final Integer[] array;
public IntegerArray(Integer... array) {
this.array = array;
}
@Override
public boolean equals(Object o) {
if (o instanceof IntegerArray) {
return Arrays.equals(this.array, ((IntegerArray) o).array);
}
return false;
}
}
public class Test {
public static void main(String args[]){
List<IntegerArray> subSet = new ArrayList<IntegerArray>();
subSet.add(new IntegerArray(0,1,2,3,4));
subSet.add(new IntegerArray(0,1,2,3,5));
subSet.add(new IntegerArray(0,0,0,0,0));
//prune this collection by removing an Integer[]
IntegerArray elementToRemove = new IntegerArray(0,0,0,0,0);
System.out.println( "Before " + subSet.size());
subSet.remove(elementToRemove);
System.out.println( "After " + subSet.size());
}
}
测试类:
public class IntegerArray {
public final Integer[] array;
public IntegerArray(Integer... array) {
this.array = array;
}
@Override
public boolean equals(Object o) {
if (o instanceof IntegerArray) {
return Arrays.equals(this.array, ((IntegerArray) o).array);
}
return false;
}
}
public class Test {
public static void main(String args[]){
List<IntegerArray> subSet = new ArrayList<IntegerArray>();
subSet.add(new IntegerArray(0,1,2,3,4));
subSet.add(new IntegerArray(0,1,2,3,5));
subSet.add(new IntegerArray(0,0,0,0,0));
//prune this collection by removing an Integer[]
IntegerArray elementToRemove = new IntegerArray(0,0,0,0,0);
System.out.println( "Before " + subSet.size());
subSet.remove(elementToRemove);
System.out.println( "After " + subSet.size());
}
}
公共类测试{
公共静态void main(字符串参数[]){
列表子集=新的ArrayList();
添加(新的整数数组(0,1,2,3,4));
添加(新的整数数组(0,1,2,3,5));
add(新的整数数组(0,0,0,0));
//通过删除整数[]来修剪此集合
IntegerArray elementToRemove=新的IntegerArray(0,0,0,0);
System.out.println(“Before”+subSet.size());
子集。删除(元素删除);
System.out.println(“在”+subSet.size()之后);
}
}
数组不重写equals,因此除非您保留对添加数组的引用,否则您不能真正重写。您知道如何迭代吗?数组不重写equals,因此您不能真正重写equals,除非您保留对添加数组的引用。您知道如何迭代吗?public int hashCode(){final int prime=31;int result=1;result=prime*result+Arrays.hashCode(array);返回结果;}@Override public boolean equals(Object obj){if(this==obj)返回真;if(obj==null)返回假;if(getClass()!=obj.getClass())返回假;IntegerArray其他=(IntegerArray)obj;if(!Arrays.equals(array,other.array))返回false;返回true;}public int hashCode(){final int prime=31;int result=1;result=prime*result+Arrays.hashCode(array);返回result;}@Override public boolean equals(Object obj){if(this==obj)返回true;if(obj==null)返回false;if(getClass()!=obj.getClass())返回false;IntegerArray其他=(IntegerArray)obj;if(!array.equals(array,other.array))返回false;返回true;}