簡體   English   中英

使用LinkedList訪問get方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM