日期:2014-05-20  浏览次数:20621 次

关于对象数组删除重复的一个棘手问题
有这样一个数组如下

序号  姓名    年龄    身高
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做出来都可以。
cdsn高人多我想不会令我失望,小弟万分感谢 !!!!
先给50分,解决了困扰剩下的分再都给好心的大哥大姐们
棘手问题

------解决方案--------------------
Users users =new Users("01","张三  ",10,170);
Users users1 =new Users("02","wangwu ",20,180);
Users users2 =new Users("03","zhangliu",20,180);
Users users3 =new Users("04","张qi  ",10,170);
Users users4 =new Users("05","wu三  ",20,170);
Users users5 =new Users("05","wu三  ",10,170);

List<Users> userList = new ArrayList<Users>();
userList.add(users);
userList.add(users1);
userList.add(users2);
userList.add(users3);
userList.add(users4);
userList.add(users5);

List<Users> userListb = new ArrayList<Users>();

for(int i=0;i<userList.size();i++) {
boolean flg = false;
for(int j=0;j<i;j++) {
if(userList.get(i).getAge() == userList.get(j).getAge() && userList.get(i).getHigh() == userList.get(j).getHigh()) {
flg = true;
continue;
}
}
if(!flg) {
userListb.add(userList.get(i));
}
}
------解决方案--------------------
引用:
问题是map解决后如何转换成数组或list? 谢谢回复

假定有一个User类,负责处理每个人的信息

Map<String,User> map = new HashMap<String,User>
map.put(user1.getTall+user1.getAge,user1);
//对每个user都做这个操作,先put进map里的user会因为后put的user的key而被覆盖
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
List<User> list = new ArrayList<User>();
while(it.hasNext())
{
   list.add(map.get(it.next()));
}

大致就是这么做的了
------解决方案--------------------
public boolean equals(Object obj){

if(obj instanceof User){
User usertest =(User)obj;
if(usertest.getAge()==age&&usertest.getHigh()==high){
return true;
}
}
return false;
}
public int hashCode(){
String age1=Integer.toString(age) ;
String high1=Integer.toString(high);
int i=Integer.parseInt(age1+high1);
return i;

}
重寫 equals和hashCode方法   然後放到set中 取出來  就好了 不過沒排序
------解决方案--------------------

public class Users {

private String id;

private String name;

private int age;

private int height;






public Users(String id, String name, int age, int height) {
super();
this.id = id;
this.name = name;
this.age = age;
this.height = height;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Users other = (Users) obj;
if (age != other.age)
return false;
if (height != other.height)
return false;
return true;
}