簡體   English   中英

ArrayList的索引?

[英]Index of an ArrayList?

來自我的AP Computer Science的評論書:

考慮這個程序段。 您可以假設wordList已聲明為ArrayList<String>

 for(String s : wordList) if(s.length() < 4) System.out.println("SHORT WORD"); 

“最多可以打印SHORT WORD多少次?”

這本書說答案是wordList.size(),但為什么不為wordList.size()-1? ArrayList的索引與常規數組是否不同? 我的書說了一些有關它自動添加到索引的內容,但是我可能讀錯了。

這本書說答案是wordList.size(),但為什么不為wordList.size()-1?

它不會也不會,因為可以打印的最大次數是,如果wordList所有單詞都少於四個字符。

我想你可能會混淆的元素數量ArrayList用的有效索引ArrayList Java中的Array和List都是從零開始的,因此從0運行到list.size() - 1 這意味着最后一個元素位於list.size() - 1 這樣想吧。 如果您有數字0, 1, 2, 3則總共有多少個數字? 你有四個數字。 但是,如果將這些數字推入從零開始的數組中,則第一個元素位於位置0 ,第二個元素位於位置1 ,依此類推,直到最后一個元素位於位置3為止。

這張圖片可能會幫助您:

Indices:   0   1   2   3
         +---+---+---+---+
Values:  | 1 | 2 | 3 | 4 |
         +---+---+---+---+

當然,最大值為wordList.size(),這在所有wordList的單詞均為短單詞時發生。 然后,從位置0到位置wordList.size()-1(均包括在內)的wordList較短。

數組或ArrayList的最大索引為size-1。 這是因為集合的索引基於0。 您可以將索引視為偏移量。

假設我有一個包含以下內容的ArrayList:

["abc"]

數組中有1元素,因此其大小為1 第一個元素的索引(或偏移量)為0因為它位於數組的根。 如果我的數組是:

["abc", "bcd", "cde", "def" ]

然后您可以看到數組中有4個條目,因此大小為4 最后一個元素“ def”的偏移量為3,因為您必須從根開始向前3步才能到達那里。 0步給出“ abc”,1步給出“ bcd”,2 =“ cde”,3 =“ def”。 因此size為4,但是您無法在第4個索引處獲得該項目,因為4步使您超越了“ def”。

for(String s : wordList)
   if(s.length() < 4)
     System.out.println("SHORT WORD");

基本上說:“調用列表s中的第一個單詞。如果該單詞少於4個字母,請在控制台上打印“ SHORT WORD”。現在,重復第二個單詞,依此類推,直到沒有單詞為止。

因此,如果列表中所有單詞的長度都少於4個字母,則“ SHORT WORD”將被打印wordlist.size()次。

你問:

“最多可以打印SHORT WORD多少次?”

如果wordList所有項目的length < 4 ,則將打印所有項目。

那么, wordList有幾個itens? 簡單: wordList.size()

ArrayListsize()方法語義:

在總共3 itens的ArrayList ,例如:

ArrayList wordList = new ArrayList<String>();
wordList.add("firstWord");
wordList.add("2ndWrd");
wordList.add("3w");

size()是項數(例如array.length )。 因此,在這種情況下, 3

但是ArrayList的索引(作為常規數組)是基於0的 (從0size()-1 )。 所以:

wordList.get(0); // returns "firstWord"
wordList.get(1); // returns "2ndWrd"
wordList.get(2); // returns "3w"
wordList.get(3); // throws an exception (IndexOutOfBoundsException)

因此你的困惑。

無限次。 單詞列表被聲明為ArrayList,但實際上它可以是數組列表的子類。 因此,您可以使數組列表返回無限迭代器,並返回空字符串。

ArrayList<String> wordList = new ArrayList<String>() {
        @Override
        public Iterator<String> iterator() {
            return new Iterator<String>() {
                @Override
                public boolean hasNext() {
                    return true;
                }

                @Override
                public String next() {
                    return "";
                }

                @Override
                public void remove() {
                    throw new UnsupportedOperationException("Not supported yet.");
                }
            };
        }
    };
    for (String s : wordList) {
        if (s.length() < 4) {
            System.out.println("SHORT WORD");
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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