Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从集合中删除数组?_Java_Collections - Fatal编程技术网

Java 如何从集合中删除数组?

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

我有一个整数[]的集合,我想从中删除一些元素,但通常的删除方法似乎不起作用。 除了迭代和比较Integer[]的每个元素之外,还有其他解决方法吗。 下面是这个问题的测试代码

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;}