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_Pointers - Fatal编程技术网

Java列表:从标识符中获取下一个或上一个元素

Java列表:从标识符中获取下一个或上一个元素,java,list,pointers,Java,List,Pointers,我想通过标识符导航到列表中 1-我管理/创建列表 2-我创建函数从列表中获取标识符元素的下一项 你能帮我修复这个代码吗 准备清单 List<String> myList = new ArrayList<String>(); myList.add("1"); myList.add("2"); myList.add("3"); myList.add("4"); myList.add("5"); public String function getNext(String u

我想通过标识符导航到列表中

1-我管理/创建列表

2-我创建函数从列表中获取标识符元素的下一项

你能帮我修复这个代码吗

准备清单

List<String> myList = new ArrayList<String>();
myList.add("1");
myList.add("2");
myList.add("3");
myList.add("4");
myList.add("5");


public String function getNext(String uid) {

    if (myList.indexOf(uid).hasNext()) {
        return myList.indexOf(uid).nextElement();
    }
    return "";
}

public String function getPrevious(String uid) {
    return myList.indexOf(uid).hasPrevious() ? myList.indexOf(uid).previousElement() : "";
}
List myList=new ArrayList();
myList.添加(“1”);
myList.添加(“2”);
myList.添加(“3”);
myList.添加(“4”);
myList.添加(“5”);
公共字符串函数getNext(字符串uid){
if(myList.indexOf(uid.hasNext()){
返回myList.indexOf(uid.nextElement();
}
返回“”;
}
公共字符串函数getPrevious(字符串uid){
返回myList.indexOf(uid).hasPrevious()?myList.indexOf(uid).previousElement():“”;
}

如果您的元素没有重复,您需要的是NavigableSet:


您正在寻找的方法是
higher
lower

您可以使用索引来查找字符串,该方法更快、更简单,但可以按现有功能实现这些功能

public String getNext(String uid) {
    int idx = myList.indexOf(uid);
    if (idx < 0 || idx+1 == myList.size()) return "";
    return myList.get(idx + 1);
}

public String getPrevious(String uid) {
    int idx = myList.indexOf(uid);
    if (idx <= 0) return "";
    return myList.get(idx - 1);
}
公共字符串getNext(字符串uid){
int idx=myList.indexOf(uid);
if(idx<0 | | idx+1==myList.size())返回“”;
返回myList.get(idx+1);
}
公共字符串getPrevious(字符串uid){
int idx=myList.indexOf(uid);

如果(idx列表没有
nextElement()
方法。
indexOf
返回项目的整数索引。您只需添加(或减去)一个即可获得下一个(或上一个)项目:


但是,在
ArrayList
上查找带有
indexOf
的对象是一个非常缓慢的过程,因为它必须检查每个条目。有更好的方法可以做到这一点,但这取决于您实际试图实现的目标。

唯一需要注意的是,indexOf是一个O(n)操作,但是,是的,+1。@SyntaxT3rr0r,很好。这就是为什么保留索引更好,因为
List.get(int)
O(1)
这可能会使代码更简单。NavigableSet扩展SortedSet。这不是OP的目的:NavigableSet将按排序顺序给他下一个元素,而不是按插入顺序给他。OP的目的是按照Peter Lawrey给出的答案:按插入顺序给他下一个/上一个元素的方法。@SyntaxT3rr0r在示例elem中ENT是按字典顺序插入的,没有重复,因此,当他真正需要的是一个排序集时,他没有使用列表,这是一个公平的假设…你知道,当你得到的只是一个锤子时,一切看起来都像钉子。你是不是在暗示OP知道的所有东西都是锤子?那将是非常粗鲁的。这会同样具有讽刺意味的是,你——谁知道的不仅仅是锤子——不知道什么时候应该使用锤子,什么时候不应该使用锤子。假答案就是假答案:不要试图把它扭曲成对你有利的样子。@SyntaxT3rr0r我的意思是,OP显然是一个编程新手,至少在Java中是这样(从“函数”之类的语法错误判断)他最好看看Collections API提供了什么。更重要的是,我已经见过太多经验丰富的Java程序员滥用ArrayList,所以这显然是一个常见的陷阱,值得提醒一下。
public String function getNext(String uid) {
   var index = myList.indexOf(uid);
   if (index > -1) {
     try {
       return myList.get(i+1);
     } catch ( IndexOutOfBoundsException e) {
       // Ignore
     }
   }
   return ""; // consider returning `null`. It's usually a better choice.
}