当前位置: 首页 > 知识库问答 >
问题:

在java中维护唯一数组的ArrayList

葛高澹
2023-03-14

如何维护唯一数组的ArrayList

例如,如果我有以下数组:

int [] a = {1,2,3};
int [] b = {2,1,3};
int [] c = {2,1,3};
Set<int []> result = new LinkedHashSet<>();
int [] x = {1,2,3};
int [] z = {2,1,3};
int [] m = {2,1,3};

result.add(x);
result.add(z);
result.add(m);

for(int [] arr: result){
    printArray(arr);
}
1 2 3
2 1 3
2 1 3

共有1个答案

白宏大
2023-03-14

如果不等于,可以创建一个方法来添加,如下所示:

public static Set<int[]> addIfNotExist(Set<int[]> result, int[] array) {
    Arrays.sort(array);
    boolean check = result.stream()
            .anyMatch(a -> {
                Arrays.sort(a);
                return Arrays.equals(a, array);
            });
    if (check) {
        return result;
    } else {
        result.add(array);
        return result;
    }
}

然后您可以像这样调用您的方法:

result = addIfNotExist(result, x);
result = addIfNotExist(result, z);
result = addIfNotExist(result, m);

输出

[1, 2, 3]

或者,如果使用静态,则只需使用:

static Set<int[]> result = new LinkedHashSet<>();

public static void main(String[] args) {

    int[] x = {1, 2, 3};
    int[] z = {2, 1, 3};
    int[] m = {2, 1, 3};

    addIfNotExist(result, x);
    addIfNotExist(result, z);
    addIfNotExist(result, m);

    for (int[] arr : result) {
        System.out.println(Arrays.toString(arr));
    }
}

public static void addIfNotExist(Set<int[]> result, int[] array) {
    Arrays.sort(array);
    boolean check = result.stream()
            .anyMatch(a -> {
                Arrays.sort(a);
                return Arrays.equals(a, array);
            });
    if (!check) {
        result.add(array);
    }
}
 类似资料:
  • 问题内容: 如何在Java中创建唯一/不同对象(无重复)的列表? 现在,由于密钥已被覆盖,因此我正在使用它,因此最后我们可以获得唯一的密钥。但是我相信应该有一种更好的方法,因为这里浪费了价值部分。 问题答案: 您可以使用Set实现: 来自JAVADoc的一些信息: 一个不包含 重复元素的集合 。更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)最多包含一个空元素。顾名思义,此接

  • 问题内容: 我有一个2D Numpy数组,包含从0到n的值。我想要一个长度为n的列表,以使该列表的第i个元素是值i + 1(不包括0)的所有索引的数组。 例如,对于输入 我期望得到 我发现了一个相关的问题: 在numpy数组中获取重复元素的所有索引的列表, 这可能会有所帮助,但我希望找到一个更直接的解决方案,该方法不需要展平和排序数组,并且尽可能高效。 问题答案: 这是一种矢量化方法,适用于任意数

  • 问题内容: 我已经做了很多关于溢出和谷歌的环顾工作,但是对于我的具体情况,结果都不起作用。 我有一个名为$ holder的占位符数组,值如下: 我正在尝试从此多维数组中提取不同/唯一的值。我想要的最终结果是一个包含(13,121)的变量,或者是(最好是)一个如下数组:Array([0] => 13 [1] => 121) 再次,我尝试了序列化等,但是当在每个数组中使用单个键进行操作时,我不太了解它

  • 问题内容: 我有一个多维数组设置,如下所示: 在该区域中搜索“名称”中的重复值并将其删除以使多维数组中的每个值都是唯一的最佳方法是什么? 提前致谢! 问题答案: 由于每个人都提供了替代方案,因此这里是解决当前问题的方法。有时,我们必须使用已有的数据,而不必按照自己喜欢的方式进行重新排列。话虽如此,这将从阵列中删除所有重复的后续条目。 看起来像这样:

  • 问题内容: 例如: 一个) 与 b) 最初以为我会为了简化而选择a)。 我知道Java不会像C那样在内存中线性存储数组,但是这对我的程序有什么影响? 问题答案: 通常,在搜索答案时,最好的办法是查看如何将选择编译到JVM字节码中: 这被翻译成: 因此,如您所见,JVM已经知道我们在谈论多维数组。 进一步说明: 这被转换为(跳过循环): 因此,如您所见,多维数组在VM内部进行处理,无用指令不会产生开

  • 主要内容:创建一维数组,分配空间,初始化一维数组,获取单个元素,获取全部元素当数组中每个元素都只带有一个下标时,这种数组就是“一维数组”。一维数组(one-dimensional array)实质上是一组相同类型数据的线性集合,是数组中最简单的一种数组。 数组是引用数据类型,引用数据类型在使用之前一定要做两件事情:声明和初始化。所以本文将重点介绍一维数组的创建、初始化和使用。 创建一维数组 为了在程序中使用一个数组,必须声明一个引用该数组的变量,并指明整个变量可以引用的数