黑马程序员技术交流社区

标题: 有关集合里的一个不太理解的问题,标在代码里了 [打印本页]

作者: 咕咕猫    时间: 2013-9-11 20:48
标题: 有关集合里的一个不太理解的问题,标在代码里了
本帖最后由 咕咕猫 于 2013-9-11 22:21 编辑

练习:去除ArrayList集合中的重复元素
import java.util.*;
class ArrayListTest
{
        public static void main(String[]args)
        {
                ArrayList a1 = new ArrayList();
                a1.add("java01");
                a1.add("java01");
                a1.add("java02");
                a1.add("java04");
                a1.add("java02");
                a1.add("java03");
                a1 = SingleEment(a1);
        }
        
        public static ArrayList SingleEment(ArrayList a1)
        {
                //定义一个临时容器
                ArrayList newA1 = new ArrayList();
                Iterator it = a1.iterator();
        while (it.hasNext())
        {
        Object obj = it.next();//{:soso_e132:}进行此步骤的目的是什么呢,为了方便吗? 如果没有这一步下一行的代码可不可以写成if (!newA1.contains( it.next()))
                if (!newA1.contains(obj))
                newA1.add(obj);
        }
                return newA1;
        }
}


作者: 垂天云    时间: 2013-9-11 20:59
本帖最后由 垂天云 于 2013-9-11 21:08 编辑

        while (it.hasNext())
        {
                  Object obj = it.next();
        }

首先对集合中是否有元素进行判断,若存在元素就取出,作为Object类,while 语句特性是每一次都会做判断,元素会一直被取出,直到集合中没有元素为止。

作者: Yuan先生    时间: 2013-9-11 20:59
Object obj = it.next();
if (!newA1.contains(obj))
这两行代码其实和下面这行的作用一样,不过分成两行写有助于提高代码的可读性
if (!newA1.contains( it.next()))
               
作者: 咕咕猫    时间: 2013-9-11 21:02
垂天云 发表于 2013-9-11 20:59
我觉得应该就是简化代码,把集合里的元素,都作为Object类取出。

那就是说只不过是定义一个Object对象来标识一下为了方便的吧

作者: 垂天云    时间: 2013-9-11 21:10
咕咕猫 发表于 2013-9-11 21:02
那就是说只不过是定义一个Object对象来标识一下为了方便的吧

我觉得是这样的,代码更易读易懂些。
作者: xiaoxu    时间: 2013-9-11 21:26
Object obj = it.next();//是因为后面对它的引用有2次的操作
if (!newA1.contains(obj))
     newA1.add(obj);
如果你直接用,if (!newA1.contains(it.next()))
                       newA1.add(it.next()));
这样2次拿到的元素就不是一个了,所以前面用obj来记录it.next()是有必要的
作者: (0.0)’    时间: 2013-9-11 21:39
xiaoxu 发表于 2013-9-11 21:26
Object obj = it.next();//是因为后面对它的引用有2次的操作
if (!newA1.contains(obj))
     newA1.add(o ...

就是应该这么想,他和随机一样,不能2次或以上使用。
作者: 咕咕猫    时间: 2013-9-11 22:06
xiaoxu 发表于 2013-9-11 21:26
Object obj = it.next();//是因为后面对它的引用有2次的操作
if (!newA1.contains(obj))
     newA1.add(o ...

噢噢噢 对的呀 相当于是又往下取了一个值了 对吧 这样做确保两个值是同一个值 谢谢啦





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2