A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闫杏荣 黑马帝   /  2012-5-1 12:11  /  2343 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

小程序一枚:
import java.util.*;
class CollectionDemo
{
        public static void main(String[] args)
        {
                ArrayList aa = new ArrayList();
                aa.add("abc");
                aa.add(12);
                System.out.println(aa);
                aa.remove(12);
                System.out.println(aa);
        }
}

编译时没有问题,运行时结果为:

ArrayList 是用来存储对象的集合。
疑问1、12是做为对象存入到集合的吗?常量可以做为对象吗?
疑问2、12可以像“abc”一样存入集合,为什么不能用remove(12)来删除对象 ?
疑问3、如何才能删除集合中的12呢?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
保存12 会自动装箱成integer对象存入,
remove(int index)  移除此列表中指定位置上的元素。所以不能用remover(12)来删除12的对象因为12代表的是集合中的位置。
要删除需要remove(Object o) 移除此列表中首次出现的指定元素(如果存在)。
  1. import java.util.*;

  2. class testJava {
  3.         public static void main(String[] args) {
  4.                 ArrayList aa = new ArrayList();
  5.                 aa.add("abc");
  6.                 aa.add(12);
  7.                 System.out.println(aa);
  8.                 aa.remove(new Integer(12));
  9.                 System.out.println(aa);
  10.         }
  11. }
复制代码

点评

哦哦、原来如此,吗也不说了,看视频补充基础去。  发表于 2012-5-1 14:17

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
针对于疑问:
解答1: 由于你的ArrayList并没有制定泛型,所以该aa中可以存入任意类型的对象,对于12 是被转化为Integer的实例后在存入aa中的,并不是常量
解答2:既然12是Integer类的实例自然可以存入,对已remove(int index)是通过下标索引来删除的,add(12)是将12 存入第二个位置,java从0开始,所以
         12 其对应的index便为 1  ,所以需要通过aa.remove(1)来删除
解答3:见解答2

个人建议:对于ArrayList 的使用建议为其指定泛型,这样也更加安全,使用效率也更高!
有疑问,继续交流噢

点评

事实证明您是对的。  发表于 2012-5-1 14:28

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
E
remove(int index)
          移除此列表中指定位置上的元素

boolean
remove(Object o)
          移除此列表中首次出现的指定元素(如果存在)。


上面两个是api文档中的 也就是说你要remove一个元素,要么用角标index的形式,要么用 移除obj的形式,你这个remove(12)其实是移除了元素中第十二个角标位置的元素,如果非要移除的话可以移除第1个元素,也可以把12封装起来,拆箱装箱嘛,就是这个理,集合里面存的不是int的12,而是Integer的12,是一个对象。


点评

解析很透彻,谢谢!  发表于 2012-5-1 14:30
回复 使用道具 举报
保存12 会自动装箱成integer对象存入,
而你用的ArrayList所以可以有两种删除方式···
意思通过remove接受Objet来删除 remove(new Integer(12));
第二种是通过角标删除 集合里面可以操作狡辩的都是ArrayList的特有方法

点评

嗯嗯,两种方法都验证过了。谢谢。  发表于 2012-5-1 14:33
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马