如何从数据结构中获取和删除第一个元素?

How can I get and remove the first element from a data structure?

我需要使用可以 -

的数据结构

下面是我的代码,它使用了 LinkedList 但它没有过滤掉任何重复项。它有 removeFirst() 方法获取和删除列表中的第一个元素。

public static LinkedList<String> getData(TypeEnum types) {
    LinkedList<String> listOfPaths = new LinkedList<String>();
    String prefix = types.equals(TypeEnum.PARTIAL) ? TypeEnum.PARTIAL.value() : TypeEnum.UNPARTIAL.value();
    listOfPaths.add(prefix + LOCAL_PATH); // first element in the list is always LOCAL PATH
    for (String path : REMOTE_PATH) {
        listOfPaths.add(prefix + path);
    }
    return listOfPaths;
}

下面是我如何使用 getData 方法:

LinkedList<String> data = getData(types);
String local_path = data.removeFirst(); // this is my local path
// use local_path here

// now iterate all the remote path
for(String remotePath : data) {
    // do something with remotePath
}

我这里有哪些有效的选项?是否有任何其他数据结构可以通过避免重复来做同样的事情。我知道 Set 可以做到这一点,但 Set 没有任何 removeFirst 方法,并且不确定在这里使用它是否是正确的结构。另外,谁也能举个例子。

这个答案是根据@copeg 的评论修正的,谢谢。

解决方案可能是通过执行以下操作来简单地扩展列表添加方法:

public class MyList<E> extends LinkedList<E> {
     @Override
     public boolean add(int index, E element){
        if(this.contains(element))return false;
        return super.add(index,element);
    }

}

您可以使用 LinkedHashSet(维持插入顺序)。例如,首先将项目添加到此 Set 以过滤掉重复项,然后将所有项目添加到 LinkedList:

public static LinkedList<String> getData(TypeEnum types) {
    LinkedList<String> listOfPaths = new LinkedList<String>();
    LinkedHashSet<String> uniques = new LinkedHashSet<String>();
    String prefix = types.equals(TypeEnum.PARTIAL) ? TypeEnum.PARTIAL.value() : TypeEnum.UNPARTIAL.value();
    uniques.add(prefix + LOCAL_PATH); // first element in the list is always LOCAL PATH
    for (String path : REMOTE_PATH) {
        uniques.add(prefix + path);
    }
    listOfPaths.addAll(uniques);
    return listOfPaths;
}