首页 > 试题广场 >

NumberList是一个顺序容器,以下代码对其执行后,Nu

[单选题]
以下代码对其执行后,NumberList里的元素依次为:
List<Integer> NumberList = new ArrayList<Integer>();
NumberList.add(2);
NumberList.add(4);
NumberList.add(1);
NumberList.add(3);
NumberList.add(5);
for(int i =0;i<NumberList.size();++i){
    int v = NumberList.get(i);
    if(v%2==0){
        NumberList.remove(v);
    }
}
System.out.println(NumberList);
  • 2,4,1,3,5
  • 2,1,3,5
  • 4,1,3,5
  • 会出现越界情况
这题主要考察两点:
1.ArrayList删除元素后,剩余元素会依次向前移动,因此下标一直在变,size()也会减小;
2.remove()方法调用的是remove(int index),而不是remove(Object o),因此删除的是index索引处的元素;
该题具体流程:1.i=0,v=2,remove(2)删除掉了元素1,因此NumberList剩余元素为【2,4,3,5】;
                          2.i=1,v=4,remove(4),此时线性表中只有四个元素,不可能删除索引为4的元素,因此会报数组下标越界异常。
发表于 2017-08-30 16:26:08 回复(20)
List的remove方法在删除元素时总会保持下标连续,因此删除第一个元素2的时候后面的元素会依次向前覆盖,也就不会访问到4了
发表于 2017-08-11 23:26:57 回复(8)
选B
对于List而言,想要移除元素,要不然就用迭代器。要不然就从后往前删除。
万万不可从前往后删,会出现角标越界。
因为List有两个remove的方法,一个是int作为形参,一个是Object作为形参。传一个基本数据类型的数字进行,调用的是第一个方法。一旦删除,原List集合在删除角标之后的元素会往前走,导致集合的长度也变小了。
比如List<String> list = new ArrayList<>(); list中的元素是["a","b","c","d","e","f"];
list.remove(3);是d被删除了,而这个时候List变成了["a","b","c","e","f"];
不是角标为3的位置没有元素了,而是后面的元素往前补了。
发表于 2018-07-17 09:35:47 回复(0)
首先代码不是java代码。
如果改成JAVA代码:
List<Integer> NumberList = new ArrayList<Integer>();
NumberList.add(2);
NumberList.add(4);
NumberList.add(1);
NumberList.add(3);
NumberList.add(5);
for(int i = 0;i<NumberList.size();++i)
{
int v = NumberList.get(i);
if(v%2 == 0)
     {
	NumberList.remove(v);
     }
}
System.out.println(NumberList);
运行后抛出异常 Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 4, Size: 4。
第一次循环:i=0 ,    v=2,    执行NumberList.remove(2) 后,l集合元素为   {2435}
第二次循环:i=1,     v=4,    执行NumberList.remove(4),数组越界(下标从0开始)
发表于 2017-08-18 11:53:08 回复(6)
这题主要考察,就是什么时候调用remove(int index),和remove(object o),
在java里面一切皆对象,除了int等基本数据类型,所以当你传入的是int时,调用 remove(int index)
而当你Integer one = 2,传入one时,调用的是remove(object o)
发表于 2018-08-02 07:48:46 回复(0)

int v = NumberList.get(i); 改成
Integer v = NumberList.get(i);就可以了

发表于 2017-12-15 12:09:19 回复(0)
这题主要考察两点:
1.ArrayList删除元素后,剩余元素会依次向前移动,因此下标一直在变,size()也会减小;
2.remove()方法调用的是remove(int index),而不是remove(Object o),因此删除的是index索引处的元素;   这个一定要注意!!!!
该题具体流程:1.i=0,v=2,remove(2)删除掉了元素1,因此NumberList剩余元素为【2,4,3,5】;
                          2.i=1,v=4,remove(4),此时线性表中只有四个元素,不可能删除索引为4的元素,因此会报数组下标越界异常。
发表于 2019-03-04 02:02:17 回复(0)
//代码改成这样,就能正确输出[1,3,5]了
List<Integer> NumberList =new ArrayList<Integer>();
        NumberList.add(2);
        NumberList.add(4);
        NumberList.add(1);
        NumberList.add(3);
        NumberList.add(5);
        for(int i =0;i<NumberList.size();)
        {
            //int v = NumberList.get(i);
            Integer v = NumberList.get(i);
            if(v%2==0)
            {
                NumberList.remove(v);
            }
            else
                i++;
        }
        System.out.println(NumberList);


发表于 2018-03-01 10:58:45 回复(2)
Iterator iter = NumberList.iterator();
		while(iter.hasNext()){
			int v = (int) iter.next();
			if(v%2 == 0)
			     {
			    iter.remove();
			     }
			}
好像用了迭代器之后,就只能用迭代器对象的remove方法,而这道题没用迭代器,而是循环遍历,自己一时想岔了
发表于 2017-09-05 13:45:56 回复(0)
list 的remove有俩个重载,一个参数接受int,即按索引删除,另一个则是object,即删除列表中含有的对象。此处为基本类型,所以会按索引来删除,运行中会发现索引已超列表长度,所以会抛出数组越界!
发表于 2017-08-25 23:14:34 回复(0)
List<int>0{2,4,1,3,5}  这个0是什么东西?
发表于 2017-08-15 21:00:10 回复(2)
几天没写代码题目都看不懂了!哎……惨
发表于 2017-08-14 23:30:35 回复(0)
remove()里面的参数是v不是i
发表于 2017-10-01 21:54:02 回复(0)
remove(Object o)的实现应该是去遍历list,逐个利用equals(Object o)比较,而不是利用==比较,我说的这一点这题还没考察到,也算是独一份的评论了吧哈哈哈。
编辑于 2019-10-24 00:33:59 回复(0)
1.ArrayList删除元素后,剩余元素会依次向前移动,因此下标一直在变,size()也会减小;
2.remove()方法调用的是remove(int index),而不是remove(Object o),因此删除的是index索引处的元素;
发表于 2019-09-11 18:28:44 回复(0)
这里i++与++i是一个作用
发表于 2018-08-15 15:59:16 回复(1)
这题主要考察两点: 1.ArrayList删除元素后,剩余元素会依次向前移动,因此下标一直在变,size()也会减小; 2.remove()方法调用的是remove(int index),而不是remove(Object o),因此删除的是index索引处的元素; 该题具体流程:1.i=0,v=2,remove(2)删除掉了元素1,因此NumberList剩余元素为【2,4,3,5】;                           2.i=1,v=4,remove(4),此时线性表中只有四个元素,不可能删除索引为4的元素,因此会报数组下标越界异常。
发表于 2019-10-23 17:59:07 回复(0)
List的remove有两种一个是remove(int index)参数是数组的下标,一个是remove(Object o)参数是数组中的某个值,这题中因为()中是int类型,所以调用的是第一种remove方法
发表于 2019-09-28 14:20:02 回复(0)
这里的问题在于,remove(v)而不是remove(i),所以会出现越界情况。如果是remove(i),结果应该是4,1,3,5
NumberList.remove(v);

发表于 2019-09-05 16:02:59 回复(0)

remove所删除的是索引,所以会出现越界异常

发表于 2019-07-29 13:36:20 回复(0)