Direct是一个包含2个get方法的类,其中一个是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;
}
直接使用directList.get(i)
。但是您不应该将基于索引的get()
方法与LinkedList
一起使用,因为它非常慢。相反,您应该使用迭代器(或每个循环使用一个迭代器,本质上是相同的):
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");
}
}
在Java 8中,您还可以使用以下解决方案(速度会比较慢,因为它会过滤整个列表):
Direct d = list.stream().filter(direct -> direct.getName().equals(name)).findFirst();
(至少)有两种方法:
// generally easier to read if you don't need access to the iteration number.
for( Direct d : directList )
{
d.getName();
// ...
}
或使用List#get(int)
方法(虽然这是有效的,因为您使用的是LinkedList
,此解决方案是O(n^2)
而不是O(n)
,因此不应该使用)
for( int i = 0; i < directList.size(); ++i )
{
directList.get(i).getName();
}