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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄炳期 金牌黑马   /  2013-9-21 16:22  /  1157 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄炳期 于 2013-9-21 17:31 编辑

这是主程序,功能是删除ArrayList中的重复元素。
  1. package cn.itcast.p3.arraylist.test;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;

  4. import cn.itcast.p.bean.Person;

  5. /*
  6. * 定义功能取出ArrayList中的重复元素。
  7. */

  8. public class ArrayListTest2 {

  9.         public static void main(String[] args) {
  10.                
  11. //                demo();
  12.                
  13. //                singleDemo();//存储字符串时
  14.                
  15.                 //存储自定义对象时
  16.                 /*
  17.                  * contains 底层也是用equals方法实现判断集合是否有相同元素的。
  18.                  */
  19.                 ArrayList al = new ArrayList();
  20.                 al.add(new Person("lisi1",21));
  21.                 al.add(new Person("lisi3",23));
  22.                 al.add(new Person("lisi2",22));
  23.                 al.add(new Person("lisi3",23));
  24.                 al.add(new Person("lisi4",24));
  25.                 al.add(new Person("lisi1",21));
  26.                 System.out.println(al);
  27.                
  28.                 al = getSingleElement(al);
  29.                
  30.                 System.out.println(al);


  31.         }

  32.         

  33.         /**
  34.          *
  35.          */
  36.         public static void singleDemo() {
  37.                 ArrayList al = new ArrayList();
  38.                 al.add("abc");
  39.                 al.add("abc1");
  40.                 al.add("abc2");
  41.                 al.add("abc2");
  42.                 al.add("abc1");
  43.                 System.out.println(al);
  44.                
  45.                 al = getSingleElement(al);
  46.                
  47.                 System.out.println(al);
  48.         }

  49.         public static ArrayList getSingleElement(ArrayList al) {
  50.                
  51.                 //1.定义临时容器。
  52.                 ArrayList temp = new ArrayList();
  53.                
  54.                 //2.迭代al集合
  55.                 Iterator it = al.iterator();
  56.                 while(it.hasNext()){
  57.                         Object obj = it.next();
  58.                         Person p = (Person)obj;
  59.                         //3.判断被迭代到的元素是否在临时容器中存在。
  60.                         if(!temp.contains(p))
  61.                                 temp.add(p);
  62.                         
  63.                 }
  64.                 return temp;
  65.         }

  66. }
复制代码
下面这一段是Person类。
  1. package cn.itcast.p.bean;

  2. public class Person {
  3.         
  4.         private String name;
  5.         private int age;
  6.         
  7.         public Person() {
  8.                 super();
  9.                
  10.         }
  11.         public Person(String name, int age) {
  12.                 super();
  13.                 this.name = name;
  14.                 this.age = age;
  15.         }
  16.         
  17.         
  18.         /*
  19.         @Override
  20.         public int hashCode() {
  21.                
  22.                 return name.hashCode()+age;
  23.         }*/
  24.         @Override
  25.         public boolean equals(Object obj) {
  26.                
  27.                 if(this == obj)//健壮性判断
  28.                         return true;
  29. //                if(obj instanceof Person)
  30. //                        throw new ClassCastException("类型错误");
  31.                 Person p = (Person)obj;
  32.                
  33.                 return this.name.equals(p.name) && this.age==p.age;
  34.         }
  35.         public String getName() {
  36.                 return name;
  37.         }
  38.         public void setName(String name) {
  39.                 this.name = name;
  40.         }
  41.         public int getAge() {
  42.                 return age;
  43.         }
  44.         public void setAge(int age) {
  45.                 this.age = age;
  46.         }
  47.         
  48. }
复制代码
我的问题是,程序运行结果显示的是@哈希值,怎么改才能正常显示?
   程序里也我做了强转了,还是不行。

这是运行结果:

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

6 个回复

倒序浏览
本帖最后由 常在河边走_ 于 2013-9-21 16:32 编辑

看了一下你的代码,  你添加进去的是对象p,打印的时候当然是地址值啦!而且你有没有在Person类中重写toString()方法,你看下面的图片:

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
常在河边走_ 发表于 2013-9-21 16:25
看了一下你的代码,  你添加进去的是对象p,打印的时候当然是地址值啦!而且你有没有在Person类中重写toStr ...

ArrayList存的就是对象,我重写了equals方法,contains在底层走的也是equals方法,视频里没有重写toString方法,也可以正常显示,而我的不能。
所以就请教大家了。
回复 使用道具 举报
黄炳期 发表于 2013-9-21 16:53
ArrayList存的就是对象,我重写了equals方法,contains在底层走的也是equals方法,视频里没有重写toStrin ...

我有点说错了,我的意思是,你打印的是p对象,而不是p对象里面对应的值哦
回复 使用道具 举报
常在河边走_ 发表于 2013-9-21 16:58
我有点说错了,我的意思是,你打印的是p对象,而不是p对象里面对应的值哦
...

呵呵,没事,你指出来的地方是判断添加对象语句。我打印的是整个ArrayList里的对象内容。
回复 使用道具 举报
本帖最后由 常在河边走_ 于 2013-9-21 17:25 编辑
黄炳期 发表于 2013-9-21 17:09
呵呵,没事,你指出来的地方是判断添加对象语句。我打印的是整个ArrayList里的对象内容。 ...

那还有什么问题吗? 你打印的是对象来的,你没有重写toString()方法,打印出来的当然是地址值咯

你要这样子:

回复 使用道具 举报
常在河边走_ 发表于 2013-9-21 17:19
那还有什么问题吗? 你打印的是对象来的,你没有重写toString()方法,打印出来的当然是地址值咯

你要这样 ...

{:soso_e110:}真麻烦你了哈,经你提醒,我在person类中覆盖了toString方法后才显示正常,谢谢哈。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马