有没有一个无重复元素的列表实现?

102
我知道有关于 SortedSet 的内容,但在我的情况下,我需要实现 List 而不是 Set。所以是否存在一个在API中或其他地方的实现呢?
虽然我自己实现这个应该不难,但我想先问一下这里的人们。

1
为什么需要实现List?集合和列表一样可迭代,所以我想接收方法之所以强制使用List,是出于其他原因。 - Rob
@Rob 没错,这是一个外部需求,数据结构包含的不仅仅是一个列表。 - Yuval
如果用户需要一个列表,那么很明显需要的是列表接口中SET接口不存在的方法。 - marcolopes
12个回答

-1
add方法中,为什么不使用HashSet.add()来检查重复项,而是使用HashSet.consist()HashSet.add()会在没有重复项时返回true,否则返回false

HashSet#consist() 是什么? - naXa stands with Ukraine

-3

我刚刚在我的小型图书馆中创建了自己的UniqueList,代码如下:

package com.bprog.collections;//my own little set of useful utilities and classes

import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Jonathan
*/
public class UniqueList {

private HashSet masterSet = new HashSet();
private ArrayList growableUniques;
private Object[] returnable;

public UniqueList() {
    growableUniques = new ArrayList();
}

public UniqueList(int size) {
    growableUniques = new ArrayList(size);
}

public void add(Object thing) {
    if (!masterSet.contains(thing)) {
        masterSet.add(thing);
        growableUniques.add(thing);
    }
}

/**
 * Casts to an ArrayList of unique values
 * @return 
 */
public List getList(){
    return growableUniques;
}

public Object get(int index) {
    return growableUniques.get(index);
}

public Object[] toObjectArray() {
    int size = growableUniques.size();
    returnable = new Object[size];
    for (int i = 0; i < size; i++) {
        returnable[i] = growableUniques.get(i);
    }
    return returnable;
    }
}

我有一个名为TestCollections的类,它看起来像这样:

package com.bprog.collections;
import com.bprog.out.Out;
/**
*
* @author Jonathan
*/
public class TestCollections {
    public static void main(String[] args){
        UniqueList ul = new UniqueList();
        ul.add("Test");
        ul.add("Test");
        ul.add("Not a copy");
        ul.add("Test"); 
        //should only contain two things
        Object[] content = ul.toObjectArray();
        Out.pl("Array Content",content);
    }
}

运行良好。它所做的就是如果集合中没有该元素,则将其添加到集合中,并返回一个可返回的ArrayList和对象数组。


是的,你应该为其添加更多方法以实现List接口。 - gyurix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接