如何仅将唯一值放入数组中?

时间:2012-12-04 19:44:46

标签: java arrays duplicates

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

2 个答案:

答案 0 :(得分:8)

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

它包含一个.toArray()方法,如果你需要的话,它会在 之后返回一个数组

答案 1 :(得分:4)

使用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);