我正在编写遍历文章记录的代码(在数据库中)。我在内存中加载数据库并将其存储在ListIterator
。
有没有人知道我是否可以访问随机位置的元素?
我创建了这个Java示例:
package com.myjava.listiterator;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class MyListIterator {
public static void main(String a[]){
List<Integer> li = new ArrayList<Integer>();
ListIterator<Integer> litr = null;
li.add(23);
li.add(98);
li.add(29);
li.add(71);
li.add(5);
litr=li.listIterator();
System.out.println("Elements in forward directiton");
while(litr.hasNext()){
System.out.println(litr.next());
}
System.out.println("Elements in backward directiton");
while(litr.hasPrevious()){
System.out.println(litr.previous());
}
// How to access litr[3]?
}
}
此代码向前和向后循环播放数字。看我上次的评论。我可以访问litr[3]
吗?
答案 0 :(得分:4)
//如何访问litr [3]?
不,你无法从迭代器中随机获取。
ListIterator没有当前元素;它的光标位置总是位于调用previous()返回的元素和调用next()返回的元素之间。
// How to access litr[3]?
我可以通过直接从列表中li.get(3);
如果您手头没有列表且只有迭代器,请先准备一份清单
List<ObjectType> dupList= new ArrayList<ObjectType>();
while (itr.hasNext())
dupList.add(itr.next());
替代方法,如果你只需要一个对象:
ObjectType target =null;
int i = 0;
while(itr.hasNext() && i!=3){
i++;
target = itr.next();
}
//access fourth element via target variable.
现在将随机索引传递给此列表(dupList)
答案 1 :(得分:2)
您的列表实例是ArryaList,只需直接使用它即可。
package com.myjava.listiterator;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class MyListIterator {
public static void main(String a[]){
ArrayList<Integer> li = new ArrayList<Integer>();
li.add(23);
li.add(98);
li.add(29);
li.add(71);
li.add(5);
....
// How to access litr[3]?
System.out.println(li.get(3));
}
}
如果您的方法只接受ListIterator而无法修改。 如果您不关心性能,这是一个解决方案。
package com.myjava.listiterator;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class MyListIterator {
public void someMethodOnlyAcceptListIterator(ListIterator<Integer> iterator){
List<Integer> tmpList = new ArrayList<Integer>();
// Save all items to the tmpList
while(iterator.hasNext()){
tmpList.add(litr.next());
}
// Access item
System.out.println(tmpList.get(3));
}
}
答案 2 :(得分:1)
您可以像li.get(3)
你也可以这样做但不好。
while(litr.hasNext()){
int curentIndex = litr.nextIndex()-1;
if(ranIndex > currentIndex) {
while(litr.hasNext()){
if(ranIndex == litr.nextIndex()-1)
sysout(yourrandomindex);
after that reset back the list curentIndex
}
}
// less than code here
}
答案 3 :(得分:1)
ListIterator
中没有此类功能。 ListIterator
允许前向和后向迭代。
至于获取litr[3]
的解决方案,您可以使用ListIterator
并将其所有元素应用到ArrayList
并执行list.get(3)
。