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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柏涛 中级黑马   /  2014-1-19 20:20  /  1751 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.ArrayList;
import java.util.Iterator;
public class Demo12 {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
       ArrayList list = new ArrayList();
       list.add(new Person("lisi",33));
       list.add(new Person("wangwu",31));
       list.add(new Person("lisi",33));
      
       Iterator it = list.iterator();
       while(it.hasNext()){
        Object obj =it.next();
        Person p = (Person)obj;
        System.out.println(p.getAge()+"::"+p.getName());
       }
}
}
    class Person{
private String name;
private int age;
Person(String name,int age){
  this.name=name;
  this.age=age;
}
public String getName(){
  return name;
}
public void setName(){
  this.name=name;
}
public int getAge(){
  return age;
}
public void setAge(){
  this.age=age;
}
public boolean equals(Object obj){
  if(!(obj instanceof Person))
   return false;
  Person p = (Person)obj;
  return this.name.equals(p.name) && this.age==p.age;
}
}

评分

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

查看全部评分

6 个回复

倒序浏览
arraylist 存储数据方式是数组结构存储,带有角标可以索引,可以存 重复元素;Set集合的子类不可以存储重复元素。

评分

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

查看全部评分

回复 使用道具 举报
需要再添加一个新的ArrayList,判断下新的list里面有没有原来list里面的元素,有就不要,没有就添加进去。
  1. public static ArrayList singleElement(ArrayList list)
  2. {
  3.   ArrayList newAl = new ArrayList();
  4.   Iterator it = list.iterator();
  5.   while(it.hasNext())
  6.   {
  7.     Object obj = it.next();
  8.     if (!newAl.contains(obj)) {
  9.         newAl.add(obj);
  10.     }
  11.   }

  12.   return newAl;
  13. }
复制代码

评分

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

查看全部评分

回复 使用道具 举报
用ArrayList加一个去除重复元素的方法后,是可以去除重复元素的,但你这个代码中缺少去除重复元素的方法。在class Demo12类中添加一个singleElement()的方法,如下
public static singleElement(Arraylist al)
{
      ArrayList newAl=new ArrayList();
      Iterator it=al.iterator();
      while(it.hasNext())
      {
           Object obj=it.next();
            if(!newAl.contains(obj))
                newAl.add(obj);
      }
      return newAl;
}
回复 使用道具 举报
import java.util.ArrayList;
import java.util.Iterator;
public class Demo12 {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
       ArrayList list = new ArrayList();
       list.add(new Person("lisi",33));
       list.add(new Person("wangwu",31));
       list.add(new Person("lisi",33));
      
       Iterator it = list.iterator();
       while(it.hasNext()){
        Object obj =it.next();
        Person p = (Person)obj;
        System.out.println(p.getAge()+"::"+p.getName());
       }
}
}
    class Person{
private String name;
private int age;
Person(String name,int age){
  this.name=name;
  this.age=age;
}
public String getName(){
  return name;
}
public void setName(){
  this.name=name;
}
public int getAge(){                  
   return age;
}
public void setAge(){               //这个方法错了,可以不要this.age=age;
}
public boolean equals(Object obj){
  if(!(obj instanceof Person))
   return false;
  Person p = (Person)obj;
  return this.name.equals(p.name) && this.age==p.age;
}
}

回复 使用道具 举报
ArraryList的结构是数组,所以它是可以有重复元素的。你的主函数里面并一个调用学生类中equals方法。所以要去除集合中的重复元素的话可以定义一个新的集合判断学生是否是重复的。代码如下:
  1. class Person
  2. {
  3.         private String name;
  4.         private int age;
  5.         public  boolean equals(Object obj)
  6.         {
  7.                 if(!(obj instanceof Person))
  8.                         return false;
  9.                 Person p=(Person)obj;
  10.                 return this.name==p.name&&this.age==p.age;
  11.                         
  12.         }
  13.         public void setName(String name) {
  14.                 this.name = name;
  15.         }
  16.         public String getName() {
  17.                 return name;
  18.         }
  19.         public void setAge(int age) {
  20.                 this.age = age;
  21.         }
  22.         public int getAge() {
  23.                 return age;
  24.         }
  25.         Person(String name,int age)
  26.         {
  27.                 this.name=name;
  28.                 this.age=age;
  29.         }
  30. }
  31. public class ArraryListTest2
  32. {
  33.         public static void main(String[] args)
  34.         {
  35.                 ArrayList<Person> al=new ArrayList<Person>();
  36.                 al.add(new Person("zhangsan",21));
  37.                 al.add(new Person("zhangsan",22));//Object obj=new Person();
  38.                 al.add(new Person("zhangsan",23));
  39.                 al.add(new Person("zhangsan",21));
  40.                 al.add(new Person("zhangsan",22));
  41.                 al=method(al);
  42.                
  43.                 //sop(al.remove(new Person("zhangsan",23)));//remove也是调用了person中的equals方法
  44.                 Iterator it=al.iterator();
  45.                 while(it.hasNext())
  46.                 {        
  47.                         Person p=(Person)it.next();
  48.                         sop(p.getName()+"....."+p.getAge());
  49.                 }
  50.                
  51.                
  52.                
  53.         }
  54.         public static void sop(Object obj)
  55.         {
  56.                 System.out.println(obj);
  57.         }
  58.         public static ArrayList method(ArrayList al)
  59.         {
  60.                 ArrayList<Object> newal=new ArrayList();
  61.                 Iterator<Object> it=al.iterator();
  62.                 while(it.hasNext())
  63.                 {
  64.                         Object obj=it.next();
  65.                         if(!newal.contains(obj))//调用的是equals方法。
  66.                                 newal.add(obj);
  67.                 }
  68.                 return newal;
  69.                
  70.         }
  71.         
  72. }
复制代码
回复 使用道具 举报
柏涛 中级黑马 2014-1-20 09:06:46
7#
楼上正解 谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马