ArrayList的索引?

时间:2013-05-06 21:22:48

标签: java arraylist

来自我的AP计算机科学一本评论书:

  

考虑这个程序段。您可以假设wordList已被声明为ArrayList<String>

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

“SHORT WORD可以打印的最大次数是多少?”

这本书的答案是wordList.size(),但为什么不是wordList.size() - 1? ArrayList的索引是否与常规数组不同?我的书上说了一些关于它自动添加一个索引但我可能已经读错了。

6 个答案:

答案 0 :(得分:6)

  

这本书的答案是wordList.size(),但为什么不是wordList.size() - 1?

它不会,也不能,因为它可以打印的最大次数是wordList中的所有单词都少于四个字符。

我认为您可能会将ArrayList中的元素数量与ArrayList的有效索引混淆。 Java中的数组和List从零开始,因此从0运行到list.size() - 1。这意味着最后一个元素位于list.size() - 1。这样想吧。如果你有数字0, 1, 2, 3,你总共拥有多少个数字?您有四个号码。但是,如果这些数字被推入基于零的数组,则第一个元素位于0位置,第二个元素位于1位置,依此类推,直到您在位置{{1}处有最后一个元素}}。

这张图片可以帮到你:

3

答案 1 :(得分:2)

当然最大的是wordList.size(),当所有wordList的单词都是短单词时会发生这种情况。然后,从位置0到位置wordList.size() - 1(包括两者)的wordList很短。

答案 2 :(得分:1)

数组或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”。

答案 3 :(得分:1)

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

基本上是说“拨打列表中的第一个单词。如果这个单词少于4个字母,请在控制台上打印”SHORT WORD“。现在,重复第二个单词,依此类推,直到没有剩下的单词为止。“

因此,如果列表中的所有单词长度少于4个字母,则“SHORT WORD”将打印wordlist.size()次。

答案 4 :(得分:1)

你问:

  

“SHORT WORD可以打印的最大次数是多少?”

如果wordList的所有项目都有length < 4,则会打印所有项目。

那么wordList有多少个呢?简单:wordList.size()

ArrayList的{​​{1}}方法语义:

在总共size()ArrayList的{​​{1}}中,例如:

3

ArrayList wordList = new ArrayList<String>(); wordList.add("firstWord"); wordList.add("2ndWrd"); wordList.add("3w"); 是项目数(例如size())。因此,在这种情况下,array.length

3的索引作为常规数组, 0 (从ArrayList转到0)。所以:

size()-1

因此你的困惑。

答案 5 :(得分:1)

无数次。 单词列表声明为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");
        }
    }
相关问题