2014-01-18 62 views
0

我正在处理类型为String的列表上的逻辑。遍历整个列表并删除队列的副本

所有,我期待的是删除列表中的重复元素。我有点嗡嗡什么错了。因为它比较相同的索引级别元素。

List<Favorite> queueFavorites = retrieve(); 

// Removing the duplicate favorite 
for (Iterator<Favorite> favoriteIterator = queueFavorites.iterator(); favoriteIterator.hasNext();) 
{ 
    FavoriteBO favoriteBO = favoriteIterator.next(); 
    if(duplicateCount(queueFavorites,favoriteBO) > 1) 
    { 
     favoriteIterator.remove(); 
     System.out.println("Favorite Removed : " + favoriteBO.getFavoriteUID()); 
    } 
} 

我重写了喜欢的类方法,如hashCode和equals。这意味着我需要使用duplicateCount()方法。

任何建议都会有帮助。

谢谢!

+1

为什么不你从'List'创建一个'Set'。 –

+0

当我重写我的List类型的equals和hascode时,它不会工作。说我的名单是类型列表,而不是名单。 – user1993412

回答

0

使用Set而不是List它只存储唯一值并实现HashSet而不是ArrayList

0

尝试设置mySet = new HashSet(List); 要转换列表设置

否则

使用含有方法,取出异物如果是这样的顺序保持

+0

我不能因为,当我重写我的List类型的equals和hascode时,它不会工作。说我的名单是类型列表,而不是名单。 – user1993412

0

的Java已经设置这样的事情是已经存在于列表... .so你应该填充一个集合,而不是一个列表......但如果不是你的情况,你有一个外部列表,你可以创建一个Set impl(例如HashSet)给你的列表在构造函数中

Set noDups = new HashSet(yourList);

的Et瞧

0

另一种解决问题的方法,而不是使用设置是使用地图:

HashMap<String, Object> map = new HashMap<String, Object>(); 
    Iterator<String> it = queueFavorites.iterator(); 
    while (it.hasNext()) { 
     String str = (String) it.next(); 
     if(map.get(str) != null) { 
      it.remove(); 
     } 
     else { 
      map.put(str, new Object()); 
     } 

    } 

这种方法保留了List中的元素和仅删除重复

+0

谢谢,当我重写我的List类型的equals和hascode时,它不会工作。说我的名单是类型列表,而不是名单。 – user1993412