黑马程序员技术交流社区

标题: ArrayList集合添加对象,取出重复元素中类equals方法中this是啥意思 [打印本页]

作者: RubinYim    时间: 2014-7-4 13:09
标题: ArrayList集合添加对象,取出重复元素中类equals方法中this是啥意思
package Day;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Vector;

public class Video {

        /**
         * @param args
         */
        public static void sop(Object obj)
        {
                System.out.println(obj);
        /*
                Iterator it = link.iterator();
                while(it.hasNext())
                {
                        sop(it.next());
                }
        */
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ArrayList a1 = new ArrayList();
               
                a1.add(new Person("lisi01", 11));
                a1.add(new Person("lisi02", 12));
                a1.add(new Person("lisi03", 13));
                a1.add(new Person("lisi01", 11));
               
                a1 = singleElement(a1);
                Iterator it = a1.iterator();
               
                while(it.hasNext())
                {
                        Person p = (Person)it.next();
                        sop(p.getName()+"----"+p.getAge());
                }
        }
        public static ArrayList singleElement(ArrayList a1)
        {
                ArrayList newA1 = new ArrayList();
               
                Iterator it = a1.iterator();
               
                while(it.hasNext())
                {
                        Person p = (Person) it.next();
                       
                        if(!newA1.contains(p))
                        {
                                newA1.add(p);
                                sop("add :"+p.getName());
                        }
                }
                return newA1;
        }

}
class Person
{
        private String name;
        private int age;
        public boolean equals(Object obj)
        {
               
                if(!(obj instanceof Person))
                {
                        return false;
                }
                Person p = (Person)obj;
               
                System.out.println(p.name+" : "+this.name);
               
                return (this.name.equals(p.name)&&this.age==p.age);
        }
        Person(String name ,int age)
        {
                this.name = name;
                this.age = age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}
作者: LeaonButcher    时间: 2014-7-4 14:42
this是引用自身的指针,java在实例化对象时,自动会给对象添加一个this。它代表对象本身,跟p代表另一个对象一样,this.name就表示自身对象中的name成员。
作者: 陈云阳    时间: 2014-7-4 16:02
最简单的说法就是  哪个对象调用该函数,this就代表哪个对象
作者: on-on    时间: 2014-7-4 16:24
看代码注释吧!
public class Video {

        /**
         * @param args
         */
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                ArrayList a1 = new ArrayList();
               
                a1.add(new Person("lisi01", 11));
                a1.add(new Person("lisi02", 12));
                a1.add(new Person("lisi03", 13));
                a1.add(new Person("lisi01", 11));
               
                a1 = singleElement(a1);
                Iterator it = a1.iterator();
               
                while(it.hasNext())
                {
                        Person p = (Person)it.next();
                        sop(p.getName()+"----"+p.getAge());
                }
        }
        public static ArrayList singleElement(ArrayList a1)
        {
                ArrayList newA1 = new ArrayList();
               
                Iterator it = a1.iterator();
               
                while(it.hasNext())
                {
                        Person p = (Person) it.next();
                        //contains()这个方法内部调用的就是equals方法,所以Person类中要重写equals方法(比较姓名和年龄)
                        //equals方法如果不重写的话,比较的是对象的hashCode
                        if(!newA1.contains(p))
                        {
                                newA1.add(p);
                                sop("add :"+p.getName());
                        }
                }
                return newA1;
        }

}
class Person
{
        private String name;
        private int age;
        public boolean equals(Object obj)
        {
               
                if(!(obj instanceof Person))
                {
                        return false;
                }
                Person p = (Person)obj;
               
                System.out.println(p.name+" : "+this.name);
                //this表示调用该方法的对象,在上面的方法中调用contains方法是这样写的:newA1.contains(p)
                //那么内部就是newAr1.equalsa(p),此时this=newAr1
                return (this.name.equals(p.name)&&this.age==p.age);
        }
        Person(String name ,int age)
        {
                this.name = name;
                this.age = age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}
作者: 柯柯    时间: 2014-7-4 16:25
this是引用自身的指针      
作者: RubinYim    时间: 2014-7-9 12:29
on-on 发表于 2014-7-4 16:24
看代码注释吧!
public class Video {

非常感谢。
作者: 晴儿    时间: 2014-7-9 13:36
哪个对象调用,这个this就是指谁。
作者: hxwo211314    时间: 2014-7-9 13:42
this就是表示调用这个函数的对象




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