Java 使用LinkedList访问get方法
Direct是一个包含2个get方法的类,其中一个是Java 使用LinkedList访问get方法,java,collections,linked-list,Java,Collections,Linked List,Direct是一个包含2个get方法的类,其中一个是getName()。 在下面的代码中,我使用的是一个数组,它工作正常 但是如果我想将它存储在LinkedList而不是数组中,那么如何迭代并访问getName()方法呢。如果只是一个常见原语(如字符串)列表,我可以很好地进行迭代,但在这种情况下,如果它是一个类列表,我对如何访问getName()方法感到困惑。谢谢你的帮助 private LinkedList<Direct> directList= new LinkedList();
getName()
。
在下面的代码中,我使用的是一个数组,它工作正常
但是如果我想将它存储在LinkedList
而不是数组中,那么如何迭代并访问getName()
方法呢。如果只是一个常见原语(如字符串)列表,我可以很好地进行迭代,但在这种情况下,如果它是一个类列表,我对如何访问getName()
方法感到困惑。谢谢你的帮助
private LinkedList<Direct> directList= new LinkedList();
private ListIterator<Direct> iterator = directList.listIterator();
private Direct[] direct = new Direct[100];
private int find(String name){
for (int x=0; x < direct.length; x++){
if (direct[x] != null)
if (direct[x].getName().equals(name)){
return x;
}
}
return -1;
}
private LinkedList directList=new LinkedList();
私有ListIterator迭代器=directList.ListIterator();
私人直销[]直销=新直销[100];
私有整数查找(字符串名称){
对于(int x=0;x
至少有两种方法:
// generally easier to read if you don't need access to the iteration number.
for( Direct d : directList )
{
d.getName();
// ...
}
或者使用方法(虽然这是有效的,因为您使用的是LinkedList
此解决方案是O(n^2)
而不是O(n)
它不应该被使用。)
for(int i=0;i
只需使用directList.get(i)
。但是,您不应该将基于索引的get()
方法与LinkedList
结合使用,因为它的速度非常慢。相反,您应该使用迭代器(或for-each循环,本质上是相同的):
您不应该使用(…获取(i))的
来迭代链接列表。对于第二种方法,您应该使用iterator()
(出于性能原因,因为需要N次迭代才能到达第N个元素),是否有任何特定的原因使您在增量i之前而不是增量后?@user3439075。增量后必须保留增量前的值的临时变量才能返回,而增量前则不能。但无论如何,这可能会被编译掉。正如@xav所说,你不应该在链表中使用get
,因为它的速度很慢:O(n)
vsO(n^2)
明白了,谢谢。正在考虑如何在使用迭代器时仍然获得匹配位置的索引值。@user3439075您可以使用迭代器和迭代索引:int i=0;对于(directd:list){…;++i;}
我想使用迭代器的方法,但是这样做,我无法获得匹配位置的索引值。啊,那么为什么不简单地引入一个int变量并自己计数呢?这仍然比在链表上使用基于索引的访问要好得多。
for( int i = 0; i < directList.size(); ++i )
{
directList.get(i).getName();
}
int cnt = 0;
List<Direct> list = new LinkedList<>();
for (Direct d : list) {
if (name.equals(d.getName())) {
return cnt;
}
cnt++;
}
for (Iterator<Direct> it = list.iterator(); it.hasNext();) {
Direct d = it.next();
if(name.equals(d.getName())){
System.out.println("matches");
}
}
Direct d = list.stream().filter(direct -> direct.getName().equals(name)).findFirst();