【问题标题】:How do I put only unique values into an array?如何仅将唯一值放入数组中?
【发布时间】:2012-11-22 12:53:35
【问题描述】:
node_marked_array.add(strings[0]);

for (int i = 0; i < strings.length; i++) {
    for (int a = 0; a < strings2.length; a = a + 2) {
        if (node_marked_array.get(i).equals(strings2[a])) {
            if (!node_marked_array.get(i).equals(strings2[a + 1])) {
                //    System.out.println("marked node: " + node_marked_array.get(i) + "=" + strings2[a] + ", added node " + strings2[a+1]);
                node_marked_array.add(strings2[a + 1]);
            }
        }
    }
}

我有一个名为 strings2 的数组,每个元素都是:

1, 2, 1, 3, 2, 3, 2, 4, 3, 2, 5, 5, 2,

我的代码应该通过数组,如果它与数组中的任何元素匹配,例如strings:{1,2,3,4,5} 与每个偶数元素的strings2。它检查上面数组的i+1 元素以查看该元素是否已添加到标记的数组中,如果没有,则添加它。但是,即使使用

,我也会看到重复的值
if (!node_marked_array.get(i).equals(strings2[a + 1]))

输出:1 2 3 3 4 2 5 2 5 5

【问题讨论】:

  • 添加一些System.out.println() 语句,看看你的代码哪里出错了。
  • 除非这是一个赋值,一个简单的方法就是将它转换为一个集合: Set mySet = new HashSet(Arrays.asList(someArray));

标签: java arrays duplicates


【解决方案1】:

使用Set。数组是这个问题的错误数据类型。

它包含一个.toArray() 方法,你构建了集合之后,如果你需要的话,它会返回一个数组。

【讨论】:

    【解决方案2】:

    使用Set。从您的代码开始:

    HashSet<String> noDuplicate = new HashSet<String>();
    for(int i=0;i<strings.length;i++)
    {
      for(int a=0;a<strings2.length;a++)
      {
        if(strings[i].equals(strings2[a]))
        {
          noDuplicate.add(strings[i]);
        }
      }
    }
    
    // And then if you need an array:
    String[] noDupArray = new String[noDuplicate.size()];
    noDuplicate.toArray(noDupArray);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 2023-03-14
      • 2020-11-03
      相关资源
      最近更新 更多