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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© joechen 中级黑马   /  2013-11-2 20:43  /  1543 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. class Person
  3. {
  4.         private String name;
  5.         private int age;
  6.         Person(String name,int age)
  7.         {
  8.                 this.name=name;
  9.                 this.age=age;
  10.         }
  11.         public String getName()
  12.         {
  13.                 return this.name;
  14.         }
  15.         public boolean equals(Object obj)
  16.         {
  17.                 Person p=(Person)obj;
  18.                 return this.name.equals/*这是Object类中的equals方法*/(p.name)&&this.age==p.age;
  19.         }
  20. }
  21. class  Demo
  22. {
  23.         public static void main(String[] args)
  24.         {
  25.                 ArrayList al=new ArrayList();
  26.                 al.add(new Person("zhangsan",20));
  27.                 al.add(new Person("lisi",21) );
  28.                 al.add(new Person("wangwu",25));
  29.                 al.add(new Person("zhangsan",20));
  30.                 sop(al);
  31.                 al=single(al);
  32.                 sop(al);

  33.         }
  34.         public static ArrayList single(ArrayList al)
  35.         {
  36.                 ArrayList newal=new ArrayList();//新建一个集合用来存储
  37.                 ListIterator i=al.listIterator();
  38.                 while (i.hasNext())
  39.                 {
  40.                         Object obj=i.next();
  41.                         Person p=(Person)obj;
  42.                         if (!newal.contains(p))
  43.                         {
  44.                                 newal.add(p);
  45.                                 sop(p.getName());
  46.                         }
  47.                 }
  48.                 return newal;
  49.         }
  50.         public static void sop(Object obj)
  51.         {
  52.                                 System.out.println(obj);
  53.         }
  54. }
复制代码
HashSet的存储方式时限判断存入的对象哈希地址是否相同,相同的话在用equals方法比较内容是否相同
List集合的存入方法是怎样的?谢谢

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
本帖最后由 零下五度的水 于 2013-11-2 22:21 编辑

Collection接口有三种实现:set集合,list列表,map地图(键值对)
集合和地图都是无序的,所以通常以hashcode的方式存储,
列表是有序的,自然是按照顺序存储和检索的

楼下的更正:map不是Collection的实现,是Directory的替代类
回复 使用道具 举报
像C语言链表一样那么存的!不需要判断,挨着盘往里面放...
回复 使用道具 举报
~﹏~ 发表于 2013-11-2 21:17
像C语言链表一样那么存的!不需要判断,挨着盘往里面放...

谢谢,你学过c语言啊?
回复 使用道具 举报
joechen 发表于 2013-11-2 21:27
谢谢,你学过c语言啊?

嗯,学过!
回复 使用道具 举报
零下五度的水 发表于 2013-11-2 21:11
Collection接口有三种实现:set集合,list列表,map地图(键值对)
集合和地图都是无序的,所以通常以hashc ...

纠正一下,map可不是Collection接口下的哦。他是一个单独的接口,替代曾经的Dictionary 这个类的。
回复 使用道具 举报
list的存储没有限制,因为他是根据顺序排列的,List与Set具有相似性,它们都是单列元素的集合,所以,它们有一个功共同的父接口,叫Collection。
Set里面不允许有重复的元素,所谓重复,即不能有两个相等(注意,不是仅仅是相同)的对象,即假设Set集合中有了一个A对象,现在我要向Set集合再存入一个B对象,但B对象与A对象equals相等,则B对象存储不进去,所以,Set集合的add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true,当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。
Set取元素时,没法说取第几个,只能以Iterator接口取得所有的元素,再逐一遍历各个元素。
       List表示有先后顺序的集合,注意,不是那种按年龄、按大小、按价格之类的排序。当我们多次调用add(Obj e)方法时,每次加入的对象就像火车站买票有排队顺序一样,按先来后到的顺序排序。有时候,也可以插队,即调用add(int index,Obj e)方法,就可以指定当前对象在集合中的存放位置。一个对象可以被反复存储进List中,每调用一次add方法,这个对象就被插入进集合中一次,其实,并不是把这个对象本身存储进了集合中,而是在集合中用一个索引变量指向这个对象,当这个对象被add多次时,即相当于集合中有多个索引指向了这个对象。

评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

回复 使用道具 举报
那得好好想想 发表于 2013-11-2 21:37
纠正一下,map可不是Collection接口下的哦。他是一个单独的接口,替代曾经的Dictionary 这个类的。 ...

哦,受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马