首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

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

2013-11-23 
关于对象数组删除重复的一个棘手问题有这样一个数组如下序号姓名年龄身高01张三1017002李四2017503马五201

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

序号  姓名    年龄    身高
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;
}



public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getHeight() {
return height;
}

public void setHeight(int height) {
this.height = height;
}

@Override
public String toString() {
return "Users [id=" + id + ", name=" + name + ", age=" + age
+ ", height=" + height + "]";
}






}


[解决办法]

import java.util.ArrayList;
import java.util.List;

public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

//System.out.println("1233");

Users[] users = new Users[8];
users[0] = new Users("01", "张三", 10, 170);
users[1] = new Users("02", "李四 ", 20, 175);
users[2] = new Users("03", "马五 ", 20, 175);
users[3] = new Users("04", "王六 ", 20, 175);
users[4] = new Users("05", "孙七", 23, 180);
users[5] = new Users("06", "陈八 ", 23, 180);
users[6] = new Users("07", "赵九 ", 30, 160);
users[7] = new Users("08", "吴十 ", 30, 160);

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

for (Users user : users) {
if(!list.contains(user)){
list.add(user);
}
}

System.out.println(list.size());

for (Users newUser : list) {
System.out.println(newUser);
}




}

}


[解决办法]

public class Test {
   public static void main(String[] args) throws Exception{
   //目标数组
   Object[][] array = new Object[][]{{"张三",10,170},
    {"李四",20,175},
    {"马五",20,175},
    {"王六",20,175},
    {"孙七",23,180},
    {"陈八",23,180},
    {"赵九",30,160},
    {"吴十",30,160}};
   List temp = new ArrayList(); //结果用list承载
   for(int i=0,len=array.length;i<len;i++){
   Object[] option = array[i];
   if(option==null){ //如果为null,则跳过 
   continue;
   }
   temp.add(option);
   Object con1 = option[1];
   Object con2 = option[2];
   for(int j=i+1;j<len;j++){
   Object[] ob = array[j];
   if(con1.equals(ob[1]) && con2.equals(ob[2])){ //如果年龄、身高都相等,则将其设为null
   array[j]=null;
   }
   }
   //System.out.println(option[0]+","+option[1]+","+option[2]); //输出结果
   }
   
   Object[] resultArray = temp.toArray(); //结果数组 
   }
}

好吧,我勤快了,又写了个有顺序的
那个list就是结果了,如果要array又做了个转换
还有,你有回复的话,用引用啊,不然我收不到你的“谢谢”
[解决办法]

User[] users = new User[]{new User(01, "张三", 10, 170)
                          ,new User(02, "李四", 20, 175)
                          .....};
Map<Integer, User> usersMap = new HashMap<Integer, User>();
Map<String, String> userIndex = new HashMap<String, String>();
for (User user : users) {
     usersMap.put(user.getNum(), user);
     String index = user.getAge() + "," + user.getHeight()
     if (userIndex.containsKey(index)) {
         userIndex.put(index, userIndex.get(index) + "," + user.getNum());


     } else {
         userIndex.put(index, user.getNum());
     }
}
User[] resultUsers = new User[userIndex.size()];
int i = 0;
for (String key : userIndex.keySet()) {
     String firstUserNum = userIndex.get(key).split(",")[0];
     resultUsers[i++] = usersMap.get(firstUserNum);
}



--小弟也来凑个热闹..

热点排行