黑马程序员技术交流社区

标题: 关于对象数组删除重复的一个棘手问题 [打印本页]

作者: 冷漠无天    时间: 2013-11-23 16:18
标题: 关于对象数组删除重复的一个棘手问题
序号  姓名    年龄    身高
01    张三    10      170
02    李四    20      175
03    马五    20      175
04    王六    20      175
05    孙七    23      180
06    陈八    23      180
07    赵九    30      160
08    吴十    30      160
....

如何只通过年龄与身高去除重复的元素。
而姓名不管,只保留第一次出现的名字
去除重复后变成如下数组

序号  姓名    年龄    身高
01    张三    10      170
02    李四    20      175
03    孙七    23      180
04    赵九    30      160
....

这个问题困扰我很久,请好人帮忙解决一下。最好给出代码例子。
用数组或list做出来都可以。最好不要用map 或set类型的集合,小弟能力有限
这里高人多我想不会令我失望,小弟万分感谢 !!!!


作者: 低调的奢华    时间: 2013-11-23 18:01
思路就是这样的,没考虑太多,可能写的不够严谨,你体会一下就行了!还有Person类(JavaBean)就不给你了,你自己创建吧!
  1.         public static void main(String args[]) throws Exception {
  2.                 List<Person> list = new LinkedList<Person>();
  3.                 list.add(new Person("张三",10,170));
  4.                 list.add(new Person("李四",20,175));
  5.                 list.add(new Person("马五",20,175));
  6.                 list.add(new Person("王六",20,175));
  7.                 list.add(new Person("孙七",23,180));
  8.                 list.add(new Person("陈八",23,180));
  9.                 list.add(new Person("赵九",30,160));
  10.                 list.add(new Person("吴十",30,160));
  11.                
  12.                 for (int i = 0; i < list.size()-1; i++) {         //遍历集合
  13.                         //i元素的年龄与i+1元素的年龄相等时,删除i+1元素
  14.                         if(list.get(i).getAge()==list.get(i+1).getAge()) {
  15.                                 list.remove(i+1);
  16.                                 i--;                //删除时后面的元素向前移动, 所以要--
  17.                         }else {
  18.                                 //当年龄不等时,判断身高
  19.                                 if(list.get(i).getHeight()==list.get(i+1).getHeight()) {
  20.                                         list.remove(i+1);
  21.                                         i--;
  22.                                 }
  23.                         }
  24.                 }
  25.                
  26.                 for (Person person : list) {        //迭代打印集合各元素
  27.                         System.out.println(person);
  28.                 }
  29.         }
复制代码

作者: 殷婷婷    时间: 2013-11-23 19:11
亲,给你一个例子哦:
  1. import java.util.*;
  2. public class ListDemo {

  3.         public static void main(String[] args) {
  4.                 // TODO Auto-generated method stub
  5.                 ArrayList<Person> list = new ArrayList<Person>();
  6.                 list.add(new Person("01","张三",10,170));
  7.                 list.add(new Person("02","李四",20,175));
  8.                 list.add(new Person("03","马五",20,175));
  9.                 list.add(new Person("04","王六",20,175));
  10.                 list.add(new Person("05","孙七",23,180));
  11.                 list.add(new Person("06","陈八",23,180));
  12.                 list.add(new Person("07","赵九",30,160));
  13.                 list.add(new Person("08","吴十",30,160));
  14.                 list = singleElement(list);
  15.                 Iterator<Person> it= list.iterator();
  16.                 while(it.hasNext())
  17.                 {
  18.                         Person p = it.next();
  19.                         System.out.println(p.getid() + " " + p.getName() + " " + p.getAge() + " " + p.getHeight() );
  20.                        
  21.                 }
  22.                
  23.         }
  24.         public static ArrayList singleElement(ArrayList<Person> al)
  25.         {
  26.                 ArrayList<Person> newAl = new ArrayList<Person>();
  27.                 Iterator<Person> it = al.iterator();
  28.                 while(it.hasNext())
  29.                 {
  30.                         Person p = it.next();
  31.                         if(!newAl.contains(p))
  32.                                 newAl.add(p);
  33.                 }
  34.                 return newAl;
  35.         }

  36. }
  37. class Person
  38. {
  39.         private String id;
  40.         private String name;
  41.     private int age;
  42.         private int height;
  43.         Person(String id,String name,int age,int height)
  44.         {
  45.                 this.id = id;
  46.                 this.name = name;
  47.                 this.age = age;
  48.                 this.height = height;
  49.         }
  50.         public String getid()
  51.         {
  52.                 return id;
  53.         }
  54.         public String getName()
  55.         {
  56.                 return name;
  57.         }
  58.         public int getAge()
  59.         {
  60.                 return age;
  61.         }
  62.         public int getHeight()
  63.         {
  64.                 return height;
  65.         }
  66.         public boolean equals(Object obj)
  67.         {
  68.                 if(!(obj instanceof Person))
  69.                         return false;
  70.                 Person p = (Person)obj;
  71.                 return this.age == p.age && this.height == p.height;

  72.         }
  73.        
  74. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2