集合框架之ArrayList存入对象的练习

package myclass;
import java.util.;
/

将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
比如:存人对象,同姓名同年龄,视为同一个人,为重复元素

思路:
1.对人描述,将数据封装进人对象中
2.定义容器,将人存入
3.取出来

List 集合判断元素是否相同,依据的事equals()方法。(contains()he remove())
*/

class Person
{
private String name;
private int age;
Person(String name,int age )//一初始化姓名和年龄就全来了
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj) //equals()方法在底层自动被调用。
//为什么定义在Person类中,而不是在主函数中。
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age = age;
}
public int getAge()
{
return age;
}
}

class ArrayListTest2
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();//判断对象是否相同equals()方法比较地址值
al.add(new Person(“lisi”,30)); // al.add(Object obj) = new Person();
al.add(new Person(“lisi1”,31));
al.add(new Person(“lisi1”,31));
al.add(new Person(“lisi2”,32));
al.add(new Person(“lisi3”,33));

     // sop(al);//这里打印出来的是地址值。

      al = singleElement(al);

     //Iterator就已经将数组中的元素取出并且打印。
      Iterator it = al.iterator();

      while(it.hasNext())
      {
            Object obj = it.next();//it.next()返回值是Object类型。需要进行强制转换  1.
             Person p = (Person)obj;
           sop(p.getName()+ "::" + p.getAge());
           //sop(it.hanNext().getName()+ "::" + it.hasNext().getAge());//不能用
       }

  }
  public static ArrayList singleElement(ArrayList al)
   {
        ArrayList nAl = new ArrayList();
   
        Iterator it = al.iterator();
     
         while(it.hasNext())
         {
              Object obj = it.next();
              if(!nAl.contains(obj))//调用contains 然后contains在底层调用equals
                   nAl.add(obj);
          }
         return nAl;
   }
   public static void sop(Object obj)
   {
         System.out.println(obj);
     }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值