[英]Using LinkedList to access a get method
Direct是一個包含2個get方法的類,其中一個是getName()
。 在下面的代碼中,我正在使用一個數組,它可以正常工作。
但是,如果我要將其存儲在LinkedList
而不是數組中,則如何迭代並到達getName()
方法。 如果僅是諸如String之類的常用基元列表,我能夠進行迭代,但是在這種情況下,它是一個類列表,我對如何到達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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.