我可以在 Java 中使用 listiterator 来访问随机位置的元素吗?
Can I use listiterator in Java to access elements in random positions?
我正在编写遍历文章记录(在数据库中)的代码。我将数据库加载到内存中并将其存储在 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]
吗?
// How to access litr[3]?
不,你不能从迭代器中随机获取。
A ListIterator has no current element; its cursor position always lies between the element that would be returned by a call to previous() and the element that would be returned by a call to next().
// How to access litr[3]?
我可以通过直接从列表中获取它来看到这里的可能性li.get(3);
如果你手头没有list,只有迭代器,先准备一个list
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)
你可以直接这样使用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
}
你的列表实例是一个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));
}
}
ListIterator
中没有这样的功能。 ListIterator
允许向前和向后迭代。
至于获得 litr[3]
的解决方案,您可以将 ListIterator
的所有元素应用到 ArrayList
中,然后执行 list.get(3)
.
我正在编写遍历文章记录(在数据库中)的代码。我将数据库加载到内存中并将其存储在 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]
吗?
// How to access litr[3]?
不,你不能从迭代器中随机获取。
A ListIterator has no current element; its cursor position always lies between the element that would be returned by a call to previous() and the element that would be returned by a call to next().
// How to access litr[3]?
我可以通过直接从列表中获取它来看到这里的可能性li.get(3);
如果你手头没有list,只有迭代器,先准备一个list
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)
你可以直接这样使用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
}
你的列表实例是一个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));
}
}
ListIterator
中没有这样的功能。 ListIterator
允许向前和向后迭代。
至于获得 litr[3]
的解决方案,您可以将 ListIterator
的所有元素应用到 ArrayList
中,然后执行 list.get(3)
.