[英]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()
。
ArrayList
的size()
方法語義:
在總共3
itens的ArrayList
,例如:
ArrayList wordList = new ArrayList<String>();
wordList.add("firstWord");
wordList.add("2ndWrd");
wordList.add("3w");
size()
是項數(例如array.length
)。 因此,在這種情況下, 3
。
但是ArrayList
的索引(作為常規數組)是基於0的 (從0
到size()-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.