Java 如何从数据结构中获取并删除第一个元素?
我需要使用一个可以-Java 如何从数据结构中获取并删除第一个元素?,java,list,set,Java,List,Set,我需要使用一个可以- 保持插入顺序 不要存储任何副本 我可以很容易地从中有效地获取并移除第一个元素 下面是我使用LinkedList的代码,但它不会过滤掉任何重复项。它有removeFirst()方法,该方法获取并删除列表中的第一个元素 public static LinkedList<String> getData(TypeEnum types) { LinkedList<String> listOfPaths = new LinkedList<Str
- 保持插入顺序
- 不要存储任何副本
- 我可以很容易地从中有效地获取并移除第一个元素
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);
返回路径列表;
}
ASortedSet
是按其元素的自然顺序(或提供的比较器)排序的,而不是按插入顺序(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;
}