Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从数据结构中获取并删除第一个元素?_Java_List_Set - Fatal编程技术网

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

Java 如何从数据结构中获取并删除第一个元素?,java,list,set,Java,List,Set,我需要使用一个可以- 保持插入顺序 不要存储任何副本 我可以很容易地从中有效地获取并移除第一个元素 下面是我使用LinkedList的代码,但它不会过滤掉任何重复项。它有removeFirst()方法,该方法获取并删除列表中的第一个元素 public static LinkedList<String> getData(TypeEnum types) { LinkedList<String> listOfPaths = new LinkedList<Str

我需要使用一个可以-

  • 保持插入顺序
  • 不要存储任何副本
  • 我可以很容易地从中有效地获取并移除第一个元素
下面是我使用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;
}

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

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

解决方案可以是通过如下操作简单地扩展list add方法:

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);
    }

}
公共类MyList扩展了LinkedList{
@凌驾
公共布尔加法(整数索引,E元素){
if(this.contains(element))返回false;
返回super.add(索引、元素);
}
}
您可以使用(维护插入顺序)。例如,首先将项目添加到此
集合
以过滤出重复项,然后将所有项目添加到
链接列表

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;
}
公共静态LinkedList getData(类型枚举类型){
LinkedList ListofPath=新建LinkedList();
LinkedHashSet uniques=新LinkedHashSet();
字符串前缀=types.equals(TypeEnum.PARTIAL)?TypeEnum.PARTIAL.value():TypeEnum.unparatial.value();
添加(前缀+本地路径);//列表中的第一个元素始终是本地路径
用于(字符串路径:远程路径){
添加(前缀+路径);
}
地址列表(uniques);
返回路径列表;
}

A
SortedSet
是按其元素的自然顺序(或提供的比较器)排序的,而不是按插入顺序(OP的第一个要求)。是的,你是对的,请参阅其他poposal。从另一方面来说,提供一个总是返回0以保持顺序不变的兼容性如何?如果是您的第二种方法,我建议重写
add(int-index,E-element)
方法,如
add(E-element)
(或可以添加到列表中的其他内部方法)委托给双参数方法谢谢您的评论。我已经修正了我的答案,将它们重新排列。链接的哈希集将保持插入顺序并消除重复项。通过使用迭代器标识第一个对象,然后使用它或调用remove(object)来删除它,可以获取并删除第一个元素。
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;
}