2017-10-09 58 views
-3

我不得不返回亙古不變的conatins重複的元素載體。如何檢查向量元素存在於HashSet的或不是在java嗎?

static Vector removeDuplicates(Vector<Integer> arr) 
    { 
    Vector<Integer> v =new Vector<>(); 
    Set<Integer> set=new HashSet<Integer>(); 
    for(int i=0;i<arr.size();i++) 
    { 
    if(!set.contains(arr[i]))// it says array required but found vector 
    } 
    } 
+0

'arr.get(我)'... – Maroun

+0

'Vectors'已被棄用,使用'List'。 –

+0

的HashSet不允許重複的元素。你不必檢查條件'if(!set.contains(arr [i]))' – Karan

回答

-1

這裏是你試圖做代碼:

而且程序的輸出是:

[1, 2, 3, 1, 2, 4] 
[1, 2, 3, 4] 

但我建議你使用列表或數組列表或其他任何數據結構,因爲沒有人在Java中使用矢量這些天。

在代碼中,你需要先檢查一下,如果當前元素存在於集合與否,如果它不存在,那麼只有元素添加到您返回新的向量。

package test; 

import java.util.HashSet; 
import java.util.Set; 
import java.util.Vector; 

public class test { 

    public static void main(String[] args) { 
     Vector<Integer> vector = new Vector<>(); 
     vector.addElement(1); 
     vector.addElement(2); 
     vector.addElement(3); 
     vector.addElement(1); 
     vector.addElement(2); 
     vector.addElement(4); 

     System.out.println(vector); 

     vector = removeDuplicates(vector); 
     System.out.println(vector); 
    } 

    static Vector<Integer> removeDuplicates(Vector<Integer> vector) { 
     Vector<Integer> v = new Vector<>(); 
     Set<Integer> set = new HashSet<Integer>(); 
     for (int i = 0; i < vector.size(); i++) { 
      if (set.add(vector.elementAt(i))) { 
       v.addElement(vector.elementAt(i)); 
      } 
     } 
     return v; 
    } 
} 
0

這段代碼這麼多的問題...

爲什麼Vector?爲什麼它不只是把Collection作爲參數,爲什麼不回到Set

不管怎麼說,這是真的只有

static Vector<Integer> removeDuplicates(Vector<Integer> arr) { 
    return new Vector<>(new HashSet<>(arr)); 
} 

如果你堅持的簽名。

或者

static <T> Vector<T> removeDuplicates(Vector<T> arr)) { // ... 
如果你想通用版

。 但同樣,我建議

static <T> Set<T> removeDuplicates(Collection<T> arr)) { // ... 
    return new new HashSet<>(arr); 
} 

,並得到由內聯它完全擺脫了代碼。

相關問題