黑马程序员技术交流社区
标题:
关于集合中的删除元素的问题
[打印本页]
作者:
黄昆
时间:
2012-6-14 19:11
标题:
关于集合中的删除元素的问题
本帖最后由 hkylp 于 2012-7-1 09:09 编辑
class list
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
System.out.println(al);
Iterator it=al.iterator();
while(it.hasNext())
{
Object obj=it.next();
if(obj.equais("java02"))
it.remove();
System.out.println("obj="+obj);
}
System.out.println(al);
}
}
为什么obj的打印结果是:java01 java02 java03呀?java02的引用从集合中删除和java02元素从集合中删除有什么区别呀?关于引用我特迷糊,希望兄弟们帮我好好分析一下。
作者:
李盼
时间:
2012-6-14 19:22
本帖最后由 李盼 于 2012-6-14 19:23 编辑
class Test
{
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
System.out.println(al);
Iterator it=al.iterator();
while(it.hasNext())
{
Object obj=it.next();
if(obj.equals("java02"))
it.remove();
System.out.println("obj="+obj);
}
System.out.println(al);
}
}
最后打印的结果是
[java01, java02, java03]
obj=java01
obj=java02
obj=java03
[java01, java03]
java02确实被移除了!另说明楼主的equals书写有误。还有集合中存放的都是对象的引用,不会存放对象本身,所以删除的也是对象的引用,不存在删除对象本身!
作者:
晏文根
时间:
2012-6-14 19:26
其实这个你应该重写下equals方法,如果你没有重写equals方法,它的作用是与“==”一样,比较的是对象引用地址是否相等。
而你加入的每一个字符串的是不同的对象,当然引用地址不同哦!
你可以重写equals
public boolean equals(String str)
{
return this.compareTo(str);
}
作者:
胡大强
时间:
2012-6-14 19:27
所谓引用,其实就是某一个变量的一个别名,所以数组是没有引用的。。当初我们的C语言老师好像讲过。譬如:int i; int &a=i; 定义了引用a,即变量i 的别名!
作者:
揭耀祖
时间:
2012-6-14 23:12
集合中就没有元素的实例对象,存的都是这些对象的引用,而引用说白了就是这些对象在内存中的地址而已。
Object obj=it.next(); //这个时候把"java02"赋给obj 了;
if(obj.equais("java02"))
it.remove(); //这只是把存放在集合中的"java02"的地址移除了而已,但内存中还是存在"java02"这个对象的
System.out.println("obj="+obj);//obj引用的对象是"java02",当然就能打印出来了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2