遍历列表并删除队列的副本

时间:2014-01-18 18:07:55

标签: java list

我正在处理类型为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这样的Favorite类方法。这意味着我需要使用duplicateCount()方法。

任何建议都会有所帮助。

谢谢!!!

4 个答案:

答案 0 :(得分:0)

使用Set代替ListHashSet仅保存唯一值,并实施ArrayList代替{{1}}。

答案 1 :(得分:0)

尝试设置mySet = new HashSet(List); 将List转换为Set

否则

使用contains方法并移除对象(如果该对象已存在于List中,以便维护订单

答案 2 :(得分:0)

Java已经设置了这种东西....所以你应该填充一个集合而不是列表...但如果不是你的情况并且你有一个外部列表你可以创建一个Set impl(例如HashSet)在构造函数中给出列表

设置noDups = new HashSet(yourList);

Etvoilå

答案 3 :(得分:0)

解决问题而不是使用Set的另一种方法是使用map:

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元素,并仅删除重复项