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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘凯 金牌黑马   /  2013-2-5 21:29  /  1398 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘凯 于 2013-2-6 16:18 编辑
  1. /*
  2. 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。

  3. 比如:存人对象。id相同,视为同一个人。为重复元素。


  4. 思路:
  5. 1,对人描述,将数据封装进人对象。
  6. 2,定义容器,将人存入。
  7. 3,取出。




  8. */
  9. import java.util.*;
  10. class person
  11. {
  12. private String name;
  13. private int age;
  14. private String id;
  15. person(String name,int age,String id)
  16. {
  17. this.name = name;
  18. this.age = age;
  19. this.id = id;
  20. }
  21. public String getName()
  22. {
  23. return name;
  24. }
  25. public int getAge()
  26. {
  27. return age;
  28. }
  29. public String getId()
  30. {
  31. return id;
  32. }
  33. public boolean equals(Object obj)
  34. {
  35. if(!(obj instanceof person))
  36. return false;
  37. person p =(person)obj;
  38. return this.id.equals(p.id);              //id 是person类中的私有变量,而p对象是调用当前对象equals方法传入的一个对象,
  39. //return this.id.equals(p.getId());          //而并非p对象的equals方法,为何仍然可以用p.id的方式调用p对象中的id??
  40.                                                               // 第1种. return this.id.equals(p.id);   第2种. return this.id.equals(p.getId());
  41.                                                                     //我认为第二种符合逻辑,第一种也能够实现,求原因???
  42. }
  43. }

  44. class ArrayListTest
  45. {
  46. public static void main(String[] args)
  47. {
  48. ArrayList al1 = new ArrayList();
  49. al1.add(new person("小明",20,"1234567890"));
  50. al1.add(new person("小强",22,"1234567890"));
  51. al1.add(new person("小红",20,"1234567892"));
  52. al1.add(new person("小明",20,"1234567891"));

  53. al1 = singleElement(al1);
  54. for(Iterator it = al1.iterator();it.hasNext();)
  55. {
  56. person p = (person)it.next();
  57. System.out.println("姓名:"+p.getName()+"\t年龄:"+p.getAge()+"\t身份证号:"+p.getId());
  58. }
  59. }

  60. public static ArrayList singleElement(ArrayList al1)
  61. {
  62. ArrayList al2 = new ArrayList();
  63. Iterator it = al1.iterator();
  64. while(it.hasNext())
  65. {
  66. Object obj = it.next();

  67. if(!(al2.contains(obj)))
  68. al2.add(obj);

  69. }

  70. return al2;
  71. }
  72. }
复制代码
如中间注释部分
return this.id.equals(p.id);              //id 是person类中的私有变量,而p对象是调用当前对象equals方法传入的一个对象,
//return this.id.equals(p.getId());          //而并非p对象的equals方法,为何仍然可以用p.id的方式调用p对象中的id??
                                                              // 第1种. return this.id.equals(p.id);   第2种. return this.id.equals(p.getId());
                                                                    //我认为第二种符合逻辑,第一种也能够实现,求原因???

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

5 个回复

倒序浏览
这是在一个类中呢?一个类中当然可以调用自己的私有成员,比如,你有辆单车,难道你自己都不可以用这两单车?
回复 使用道具 举报
胡发友 发表于 2013-2-5 21:43
这是在一个类中呢?一个类中当然可以调用自己的私有成员,比如,你有辆单车,难道你自己都不可以用这两单车 ...

我是说  比如  
public boolean function(类名 b)
{
this.id.equals(b.id);   
}


a.function()  
现在是在调用a 对象里的function() 方法   其中方法里的this.id必然时刻以直接调用的  然而b.id为什么可以这样直接调用, 搞不明白, 现在调用的方法是a对象的function()  方法啊  
回复 使用道具 举报
1、如果你传入的是同一个类型的对象,当然是可以调用,
2、注意你所谓的a,b都是对象的引用,不是实际对象;
3、引用a,引用b,都是在同一个类里初始化,b.id当然是可以直接用的;
回复 使用道具 举报
class Person{
        private String id ;
        Person(String id){
                this.id = id;
        }
        public String toString(){
                return id;
        }
}
class Test{
        public static void main(String [] args){
                //创建两个Person类型对象的引用
                //
                Person p1 = new Person("abc");
                Person p2 = new Person("bcd");
                //
                System.out.println(p1.toString());
                System.out.println(p2.toString());
        }
}

就像这个代码,p1和p2,都是person类型的对象引用,他们也都可以调用自己的toString方法,来获取数据

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
私有对象就是拿来给本类用的  你要是在本类中都不可以调用那建立这个变量来干什么
p.id p.getId() 都是访问方式  在这个类外面你访问不到private修饰的就只能访问提供的方法 但是在类中你能访问自己私有的东西为什么不能访问呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马