从二维整数数组中删除重复行

Remove Duplicate row from 2D integer array

我知道之前有人问过这个问题,但我真的找不到可行的方法 我尝试了以下 link How to construct ArrayList from 2D int array? 中的方法,我认为这与我的案例最相关我应用了以下代码:

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class MonteCarloSim {

    private int[] ints;

    public MonteCarloSim(int[] ints) {
        this.ints = ints.clone();
        Arrays.sort(this.ints);
    }

    @Override
    public int hashCode() {
        return Arrays.hashCode(ints);
    }

    @Override
    public boolean equals(Object obj) {

        if(obj instanceof MonteCarloSim) {
            MonteCarloSim another = (MonteCarloSim) obj;
            int[] original = Arrays.copyOf(another.ints, another.ints.length);
            return Arrays.equals(ints, original);
        } else {
            return false;
        }
    }

    @Override
    public String toString() {
        return Arrays.toString(ints);
    }

    public static void main(String arg[]){

然后我确定了一个二维整数数组,其中零个元素的大小为 1000*20,名为 IncProb1 我应用以下代码删除重复行:

int[][] arrays = IncProb1;
        Set<MonteCarloSim> rows = new HashSet<MonteCarloSim>();
        for(int[] a: arrays) {
            rows.add(new MonteCarloSim(a));
        }
        for(MonteCarloSim row: rows) {
            System.out.println(row);
        }

但这不起作用我只得到一行 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1 , 1, 1, 1, 1] 这不是解决方案,应该至少有 300 行不重复。我不知道怎么了 非常感谢任何帮助 提前致谢

以下方法可以解决您的问题

public static int[][] removeDuplicateRow(int[][] testArr)
    {
        /**
         * This method will remove the duplicate ROW from 2-D array and replace with {0,0,0}
         * However i assume array rows  =5 and coloums =3 ;) You can have the solution for that I assume
         */

        HashSet<String> hashSet = new HashSet<String>();
        int[][] result = new int[5][3];
        int i = 0;
        for(int[] a : testArr)
        {
            System.out.println(Arrays.toString(a));
            System.out.println(hashSet.contains(a));
            if(!hashSet.contains(Arrays.toString(a))){
                hashSet.add(Arrays.toString(a));
                result[i] = a;
            }
            i++;
        }

        System.out.println("old array : "+Arrays.deepToString(testArr));
        System.out.println("new array : "+Arrays.deepToString(result));

        return result;
    }

希望对您有所帮助。