黑马程序员技术交流社区
标题:
关于毕老师的视频第14天集合框架里面的练习没听懂,,
[打印本页]
作者:
刘俊佳
时间:
2012-7-22 14:43
标题:
关于毕老师的视频第14天集合框架里面的练习没听懂,,
package collection;
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al=new ArrayList();
al.add(new Person("lisi01",30));
al.add(new Person("lisi02",32));
al.add(new Person("lisi02",32));
al.add(new Person("lisi03",33));
al.add(new Person("lisi04",35));
al.add(new Person("lisi04",35));
al=singleElement(al);
Iterator it=al.iterator();
while(it.hasNext())
{
Person p=(Person)it.next();
sop(p.getName()+"::"+p.getAge());
}
}
public static ArrayList singleElement(ArrayList al)
{
//定义一个临时容器
ArrayList newAl=new ArrayList();
Iterator it=al.iterator();
while(it.hasNext())
{
Object obj=it.next();
if(!newAl.contains(obj))
newAl.add(obj);
}
return newAl;
}
}
class Person {
private int age;
private String name;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p=(Person)obj;
System.out.println(this.name+"......"+p.name);
return this.name.equals(p.name)&&this.age==p.age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
是怎样实现去除重复元素的,越详细越好
作者:
郭凯敏
时间:
2012-7-22 15:06
朋友我帮你注释了一下,不明白可以PM我
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo2 {
public static void sop(Object obj) {
System.out.println(obj);
}
public static void main(String[] args) {
ArrayList<Object> al = new ArrayList<Object>();
al.add(new Person("lisi01", 30));
al.add(new Person("lisi02", 32));
al.add(new Person("lisi02", 32));
al.add(new Person("lisi03", 33));
al.add(new Person("lisi04", 35));
al.add(new Person("lisi04", 35));
al = singleElement(al);// 使用相同类型的集合变量来接收新的集合
Iterator<Object> it = al.iterator();// 仍旧是对于新鲜集合的迭代
while (it.hasNext())// 仍旧是对于新集合的迭代
{
Person p = (Person) it.next();
sop(p.getName() + "::" + p.getAge());
}
}
public static ArrayList<Object> singleElement(ArrayList<Object> al) {
// 定义一个临时容器
ArrayList<Object> newAl = new ArrayList<Object>();
Iterator<Object> it = al.iterator();// 对于传进来的集合建一个迭代器对象
while (it.hasNext()) {
Object obj = it.next();// 对于传进来的集合进行对象的迭代
if (!newAl.contains(obj))// 如果新的集合中不包含这个对象,
newAl.add(obj);// 则把这个对象加入新的集合中(这样新的集合就不会有重复的对象)
}
return newAl;
}
}
class Person {
private int age;
private String name;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object obj)// 重写equals方法
{
if (!(obj instanceof Person))
return false;
Person p = (Person) obj;
// System.out.println(this.name+"......"+p.name);
return this.name.equals(p.name) && this.age == p.age;// name和age都相同才相同
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
作者:
王璐
时间:
2012-7-22 15:21
QQ截图20120722151759.png
(46.88 KB, 下载次数: 52)
下载附件
2012-7-22 15:21 上传
作者:
朱烈葵
时间:
2012-7-22 15:23
if(!newAl.contains(obj))
newAl.add(obj);
}
newAl.add(obj);
这个简单来说既是,利用集合容器的contains方法来看,你看啊,你有个容器是吧,有元素是吧,(这里就算有重复的也没关系),然后你创建了一个过滤重复元素的方法,里面新建了容器,并带有参数,你把要过滤重复元素的容器传进来,和里面的元素contains下,看下里面那个里面包不包含外面那个传进来的容器里面的元素,这时候里面的容器是空的。
对传进来的容器,进行遍历,如果包含不存入,如果不包含就存入,当遍历完后,剩下的就是 唯一的,最后是返回的是新容器,但是重复的已经过滤掉了。过滤完毕,所以你看到的是过滤掉的。
作者:
朱云坤
时间:
2012-7-22 15:32
package collection;
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al=new ArrayList();//创建一个容器 将下列元素放入容器中
al.add(new Person("lisi01",30));
al.add(new Person("lisi02",32));
al.add(new Person("lisi02",32));
al.add(new Person("lisi03",33));
al.add(new Person("lisi04",35));
al.add(new Person("lisi04",35));
al=singleElement(al);//调用singleElement方法 将al中不重复的元素返回
Iterator it=al.iterator();
while(it.hasNext())//使用迭代器
{
Person p=(Person)it.next();//因为要使用Peson类的特有方法 所以要向下转型
sop(p.getName()+"::"+p.getAge());
}
}
public static ArrayList singleElement(ArrayList al)
{
ArrayList newAl=new ArrayList();//定义一个临时容器,用来存放不包含的元素
Iterator it=al.iterator();
while(it.hasNext())//使用迭代器
{
Object obj=it.next();
if(!newAl.contains(obj))//contains方法依赖于equals方法 所以先前复写equals方法
//用来比较元素内容是否相同,contains方法用于判断临时容器newAl中是否包含指定的元素obj 如果newAl中包含
//obj
newAl.add(obj);//如果不包含 那么就将obj放入newAl中
}
return newAl;//将容器newAl返回,存放的为al中不重复的元素
}
}
class Person {
private int age;
private String name;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public boolean equals(Object obj)//复写Object类的equals方法
为 {
if(!(obj instanceof Person))//判断obj是否为Person类的实例
return false;
Person p=(Person)obj;//由于obj为Person的实例,但它被Object提升所以
// 如果需要使用子类特有的方法 需要进行向下转型
System.out.println(this.name+"......"+p.name);
return this.name.equals(p.name)&&this.age==p.age;//使用Person的特有方法 进行比较
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2