2017-05-30 50 views
0

我有整数列表,我想要创建一个for循环从序列1到n跳过列表中已经存在的元素,那么这是最好的方法还是有效的方法呢?通过跳过列表中的值来为序列编写for循环?

+0

你可以在这里找到类似的问题https://stackoverflow.com/questions/203984/how-do-i-remove-repeated-elements-from-arraylist –

+0

可能的重复[如何从ArrayList中删除重复的元素?](https://stackoverflow.com/questions/203984/how-do-i-remove-repeated-elements-from-arraylist) –

+0

这个问题与'hibernate'或'spring-mvc'有什么关系? – Andreas

回答

-1

您可以使用哈希集为目的它会自动删除重复的元素。因此,对于您的输入数组,将每个元素逐个放入哈希集中,最后您的哈希集将包含非重复元素。

在关于hashshet参阅疑惑:https://www.tutorialspoint.com/java/java_hashset_class.htm

+0

问题不在于从列表中删除重复项。这是关于'for'循环,*跳过已经在列表中的*值。 – Andreas

+0

准确地说,只有在有重复值时才跳过,这意味着对于某个值有重复。内部Hashset使用contains方法来检查输入是否存在 – pragadez

+0

问题中没有任何内容说明循环将修改列表。如果list是'[2,4,5]'和'n = 7',那么OP只需要一个迭代值为'1','3','6'和'7'的循环。其中没有任何“重复”。 – Andreas

1

大多数高效方式,即O(M + N),是将List转换为HashSet,然后检查使用contains()

Set<Integer> set = new HashSet<>(list); 
for (int i = 1; i <= n; i++) { 
    if (! set.contains(i)) { 
     // your code here 
    } 
} 

如果您未直接转换为Set,并直接使用List的方法,则性能为O(mn),其中m是列表中元素的数量。

+0

非常感谢 –