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

时间:2011-06-20 13:01:41

标签: 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 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() : "";
}

3 个答案:

答案 0 :(得分:12)

您可以使用索引来查找您的String,这样可以更快更简单地实现这些功能。

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

使用List.get(i)O(1),这使得保持索引成为最快的选择。 List.indexOf(String)O(n)。使用NavigatbleSet可能看起来很有吸引力,因为它是O(log n),但是创建对象的成本非常高,以至于在看到好处之前集合必须相当大。 (在这种情况下,您将使用第一个选项)

答案 1 :(得分:1)

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

http://download.oracle.com/javase/6/docs/api/java/util/NavigableSet.html

您正在寻找方法higherlower

答案 2 :(得分:1)

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

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.
}

然而,在indexOf上查找ArrayList的对象是一个非常缓慢的过程,因为它必须检查每个条目。有更好的方法,但这取决于你实际想要实现的目标。