下面有一个javabean
private String code = "";
private String name = "";
private String comefrom ="";//来自何方
public Student(){}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public  Student(String code,String comefrom,String name){
this.code = code;
this.name = name;
this.comefrom = comefrom;
}
public String getComefrom() {
return comefrom;
}
public void setComefrom(String comefrom) {
this.comefrom = comefrom;
}
}
然后我定义了一个List,并在里面放了student对象
List list=new ArrayList(); 
        list.add(new Student("001","北京","张三"));    
        list.add(new Student("002","北京","张三"));    
        list.add(new Student("003","北京","李四"));    
        list.add(new Student("004","北京","李四"));        
        list.add(new Student("005","北京","王五")); 
        list.add(new Student("006","北京","赵六")); 
        list.add(new Student("007","北京","张三"));    
        list.add(new Student("008","北京","张三")); 
我现在想在控制台打出下面的结果:张三:重复数是4个,code是001+002+007+008
李四:重复数是2个,code是003+004
王五:重复数是1个,code是005
赵六:重复数是1个,code是006请个位高手帮忙!谢谢

解决方案 »

  1.   

    我的程序如下:
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    public class ListArtice {
    List list=new ArrayList(); 
            list.add(new Student("001","北京","张三"));    
            list.add(new Student("002","北京","张三"));    
            list.add(new Student("003","北京","李四"));    
            list.add(new Student("004","北京","李四"));        
            list.add(new Student("005","北京","王五")); 
            list.add(new Student("006","北京","赵六")); 
            list.add(new Student("007","北京","张三"));    
            list.add(new Student("008","北京","张三")); 
        public static void main(String[] args) {
           在此处如何得到下面的结果:我不太会写!
                   张三:重复数是4个,code是001+002+007+008 
                 李四:重复数是2个,code是003+004 
                 王五:重复数是1个,code是005 
                 赵六:重复数是1个,code是006 

       }
      
      
    }
    class Student {
    private String code = "";
    private String name = "";
    private String comefrom ="";
    public Student(){}
    public String getCode() {
    return code;
    }
    public void setCode(String code) {
    this.code = code;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public  Student(String code,String comefrom,String name){
    this.code = code;
    this.comefrom = comefrom;
    this.name = name;
    }
    public String getComefrom() {
    return comefrom;
    }
    public void setComefrom(String comefrom) {
    this.comefrom = comefrom;
    }
    }
      

  2.   

    package Test;
    import java.util.ArrayList; 
    import java.util.HashMap; 
    import java.util.Hashtable; 
    import java.util.Iterator; 
    import java.util.List; 
    import java.util.Map; 
    import java.util.Set; 
    public class Test2 { 
    List<Student> list=new ArrayList<Student>(); 
    protected final void fill()
    {
     list.add(new Student("001","北京","张三"));    
         list.add(new Student("002","北京","张三"));    
         list.add(new Student("003","北京","李四"));    
         list.add(new Student("004","北京","李四"));        
         list.add(new Student("005","北京","王五")); 
         list.add(new Student("006","北京","赵六")); 
         list.add(new Student("007","北京","张三"));    
         list.add(new Student("008","北京","张三")); 
    }
    public Test2()
    {
    fill();
    }
    public String findCount(String comeFrom,String name)
    {
    int count=0;
    Student s=new Student("1",comeFrom,name);
    Iterator<Student> i=list.iterator();
    StringBuffer sb=new StringBuffer();
    sb.append(name+":"+"Code is(");
    while(i.hasNext())
    {
    Student ls=i.next();
    if(s.s_equals(ls))
    {
    count++;
    sb.append(ls.getCode()+",");
    }
    }
    sb.append(")");
    sb.append("count is ("+count+")");
    sb.append("comeFrom is ("+comeFrom+")");
    return sb.toString();
    }
      public static void main(String[] args) 
      { 
      Test2 t2=new Test2();
      System.out.println(t2.findCount("北京", "张三"));
      System.out.println(t2.findCount("北京", "李四"));
      System.out.println(t2.findCount("北京", "王五"));
      System.out.println(t2.findCount("北京", "赵六"));
      } 
      
      

    class Student { 
    private String code = ""; 
    private String name = ""; 
    private String comefrom =""; 
    public  Student(String code,String comefrom,String name){ 
    this.code = code; 
    this.comefrom = comefrom; 
    this.name = name; 

    public String getCode() { 
    return code; 

    public String getName() { 
    return name; 

    public String getComefrom() { 
    return comefrom; 

    public int HashCode()
    {
    return new String(code+name+comefrom).hashCode();
    }
    public boolean equals(Object o)
    {
    return s_equals(o)&&(((Student)o).code.equals(this.code));
    }
    public boolean s_equals(Object o)
    {
    if(!(Student.class.isInstance(o)))
    {
    return false;
    }
    Student so=(Student)o;
    return  
           so.name.equals(this.name)
           &&so.comefrom.equals(this.comefrom);
    }
      

  3.   

    你理解错了,我的意思是你不能输入参数。
      System.out.println(t2.findCount("北京", "张三")); 
      System.out.println(t2.findCount("北京", "李四")); 
      System.out.println(t2.findCount("北京", "王五")); 
      System.out.println(t2.findCount("北京", "赵六")); 
    你这样的话,程序就写死了。最好在一个方法中,在一个循环中求出。
      
      

  4.   

    qiandongbo 你好List tempListName= new ArrayList();
    for ( int i = 0; i < list.size(); i ++ )  {
     Student studenti =(Student)list.get(i);
    if(!tempListName.contains(studenti.getName())){
    tempListName.add(studenti.getName());
    }
    }
    for(int i=0;i<tempListName.size();i++){
    System.out.println("不重复的:"+(String)tempListName.get(i));
    }在我上面的代码就没有输入参数,就把不重复给列出来了不重复的:张三
    不重复的:李四
    不重复的:王五
    不重复的:赵六
      

  5.   

    楼主的意思是不需要传入参数,就把list中的数据统计出来?
      

  6.   

    是的。yinyuan1987 的意思正确。还有就是我原来的Student不能更改代码!也就是不能添加public int HashCode() 

    return new String(code+name+comefrom).hashCode(); 

    public boolean equals(Object o) 

    return s_equals(o)&&(((Student)o).code.equals(this.code)); 

    public boolean s_equals(Object o) 

    if(!(Student.class.isInstance(o))) 

    return false; 

    Student so=(Student)o; 
    return  
          so.name.equals(this.name) 
          &&so.comefrom.equals(this.comefrom); 

    } 这些代码!看能实现我说的吗?
      

  7.   

    首先改写student类添加equals方法
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result
    + ((comefrom == null) ? 0 : comefrom.hashCode());
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    return result;
    }
    @Override
    public boolean equals(Object obj) {
    return (this.comefrom.equals((((student)(obj)).comefrom)))
    && (this.name.equals((((student)(obj)).name)));
    }
    在public static void main中添加{
    student stu = (student)list.get(0) ;



    for (int i=0;i<list.size();i++){
    if(stu.equals((student)list.get(i))){
    System.out.print(((student)list.get(i)).getCode()+"\t");
    count++;
    }
    }
    System.out.println("的重复数为"+count);

      } 
    }
      

  8.   

    package csdnlist;/*
     * @auth=刘志波
     */
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class ListArtice { public static void main(String[] args) {
    List<Student> list = new ArrayList<Student>();
    list.add(new Student("001", "北京", "张三"));
    list.add(new Student("002", "北京", "张三"));
    list.add(new Student("003", "北京", "李四"));
    list.add(new Student("004", "北京", "李四"));
    list.add(new Student("005", "北京", "王五"));
    list.add(new Student("006", "北京", "赵六"));
    list.add(new Student("007", "北京", "张三"));
    list.add(new Student("008", "北京", "张三"));
    boolean  = true;
    if(null != list && list.size()>0){
    for(int i=0; i<list.size(); i++){ //遍历list中所有的student
    StringBuilder codeStr = new StringBuilder(); //StringBuilder知识点
    for(int s=0; s<i; s++){ //查找当前student是否已经被统计过
    if(list.get(i).getName().equals(list.get(s).getName())){
    //System.out.println("已经统计过了");
     = false; //已经统计过了,=false,用于推出本次i循环,执行下一i循环
    break;
    }
    }
    if( == false){
     = true;
    continue; //continue的含义知道吧
    }
    for(int j=i,m=0; j<list.size(); j++){
    if(list.get(i).getName().equals(list.get(j).getName())){
    m++;
    codeStr.append(list.get(j).getCode().toString() + "+");
    }
    if(j==list.size()-1){
    System.out.println(list.get(i).getName()+":重复数是"+ m +"个,code是" + codeStr.toString());
    }
    }
    codeStr = null;
    }
    }
    }
    }class Student {
    private String code = "";
    private String name = "";
    private String comefrom = ""; public Student() {
    } public String getCode() {
    return code;
    } public void setCode(String code) {
    this.code = code;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public Student(String code, String comefrom, String name) {
    this.code = code;
    this.comefrom = comefrom;
    this.name = name;
    } public String getComefrom() {
    return comefrom;
    } public void setComefrom(String comefrom) {
    this.comefrom = comefrom;
    }
    }试试
      

  9.   

    yinyuan1987 说的正确,就是把list中的数据统计出来,我的JDK是1.4的。不是1.5
      

  10.   

    package csdnlist;/*
     * @auth=刘志波
     */
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class ListArtice { public static void main(String[] args) {
    List list = new ArrayList();
    list.add(new Student("001", "北京", "张三"));
    list.add(new Student("002", "北京", "张三"));
    list.add(new Student("003", "北京", "李四"));
    list.add(new Student("004", "北京", "李四"));
    list.add(new Student("005", "北京", "王五"));
    list.add(new Student("006", "北京", "赵六"));
    list.add(new Student("007", "北京", "张三"));
    list.add(new Student("008", "北京", "张三"));
    boolean  = true;
    if(null != list && list.size()>0){
    for(int i=0; i<list.size(); i++){ //遍历list中所有的student
    StringBuilder codeStr = new StringBuilder(); //StringBuilder知识点
    for(int s=0; s<i; s++){ //查找当前student是否已经被统计过
    if(((Student)list.get(i)).getName().equals(((Student)list.get(s)).getName())){
    //System.out.println("已经统计过了");
     = false; //已经统计过了,=false,用于推出本次i循环,执行下一i循环
    break;
    }
    }
    if( == false){
     = true;
    continue; //continue的含义知道吧
    }
    for(int j=i,m=0; j<list.size(); j++){
    if(((Student)list.get(i)).getName().equals(((Student)list.get(j)).getName())){
    m++;
    codeStr.append(((Student)list.get(j)).getCode() + "+");
    }
    if(j==list.size()-1){
    System.out.println(((Student)list.get(i)).getName()+":重复数是"+ m +"个,code是" + codeStr.toString());
    }
    }
    codeStr = null;
    }
    }
    }
    }class Student {
    private String code = "";
    private String name = "";
    private String comefrom = ""; public Student() {
    } public String getCode() {
    return code;
    } public void setCode(String code) {
    this.code = code;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public Student(String code, String comefrom, String name) {
    this.code = code;
    this.comefrom = comefrom;
    this.name = name;
    } public String getComefrom() {
    return comefrom;
    } public void setComefrom(String comefrom) {
    this.comefrom = comefrom;
    }
    }我给你吧泛型去掉了,自己试试,我没有1.4的jdk
      

  11.   

    非常感谢你claram ,用你做的方法出来,结果也正确。你的 代码还能精简吗?谢谢!
      

  12.   

    package my.com;import java.util.*;public class Student {
    private String code = ""; 
    private String name = ""; 
    private String comefrom ="";//来自何方 

    public Student(String code,String comefrom,String name){
    this.code=code;
    this.name=name;
    this.comefrom=comefrom;
    }
    public String getCode() {
    return code;
    }
    public void setCode(String code) {
    this.code = code;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getComefrom() {
    return comefrom;
    }
    public void setComefrom(String comefrom) {
    this.comefrom = comefrom;
    }
    //重写equals方法
    public boolean equals(Object obj) {
    // TODO Auto-generated method stub
    Student stu=(Student)obj;
    if(name.equals(stu.getName())){
    return true;
    }else{
    return false;
    }

    }
        //显示信息
    public void show(List list,Student st){
    Iterator it=list.iterator();
    int count=0;
    String str="";
    while(it.hasNext()){
    Student stu=(Student) it.next();
    if(stu.equals(st)){
    count++;
    str+=stu.getCode()+",";
    }
    }
    System.out.println(st.getName()+"==="+count+"==="+str.substring(0,str.length()-1));
    }}
    test类测试
    package my.com;import java.util.*;
    public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    List list=new ArrayList();
    list.add(new Student("001","北京","张三"));    
        list.add(new Student("002","北京","张三"));    
        list.add(new Student("003","北京","李四"));    
        list.add(new Student("004","北京","李四"));        
        list.add(new Student("005","北京","王五")); 
        list.add(new Student("006","北京","赵六")); 
        list.add(new Student("007","北京","张三"));    
        list.add(new Student("008","北京","张三"));  Student st=new Student("34","北京","张三");
    st.show(list, st);
    st=new Student("003","北京","李四");
    st.show(list, st);
    st=new Student("005","北京","王五");
    st.show(list, st);
    st=new Student("006","北京","赵六");
    st.show(list, st);
    }}
      

  13.   

    public String findCount()
    {
    Map<Student,Integer> map=new HashMap<Student,Integer>();//定义map,用来存储list中出现元素的次数
    Iterator<Student> list_iterator=list.iterator();
    while(list_iterator.hasNext())//循环list
    {
    Student list_s=list_iterator.next();
    Set<Student> hs=map.keySet();
    Iterator<Student> set_iterator=hs.iterator();
    outer:
        while(set_iterator.hasNext())  //在map之中查找是否已装载该Student,如果找到,返回顶部循环
    {
    Student set_s=set_iterator.next();
    if(list_s.s_equals(set_s))
    {
    map.put(set_s,map.get(set_s)+1);
    continue outer;
    }
    }
    map.put(list_s,1);//如果没找到,则将该元素加入map,计数为1
    }
    return map.toString();
    }
    好了,改好了,LZ不一开始把意思说明白~
      

  14.   

    对了,用容器装自定义类时,记得覆盖hashCode()与equals()~
      

  15.   

    public String findCount()
    {
    Map<Student,Integer> map=new HashMap<Student,Integer>();//定义map,用来存储list中出现元素的次数
    Iterator<Student> list_iterator=list.iterator();
    outer:
    while(list_iterator.hasNext())//循环list
    {
    Student list_s=list_iterator.next();
    Set<Student> hs=map.keySet();
    Iterator<Student> set_iterator=hs.iterator();
        while(set_iterator.hasNext())  //在map之中查找是否已装载该Student,如果找到,返回顶部循环
    {
    Student set_s=set_iterator.next();
    if(list_s.s_equals(set_s))
    {
    map.put(set_s,map.get(set_s)+1);
    continue outer;
    }
    }
    map.put(list_s,1);//如果没找到,则将该元素加入map,计数为1
    }
    return map.toString();
    }
    outer:位置写错了~
      

  16.   

    我写的有点复杂了,claram 朋友写的不错,楼主用他的吧!你要是要我的也发给你,方法封装的,太乱了!
      

  17.   

    package Test;
    import java.util.ArrayList; 
    import java.util.HashMap; 
    import java.util.Hashtable; 
    import java.util.Iterator; 
    import java.util.List; 
    import java.util.Map; 
    import java.util.Set; 
    public class Test2 { 
    List<Student> list=new ArrayList<Student>(); 
    protected final void fill()
    {
     list.add(new Student("001","北京","张三"));    
         list.add(new Student("002","北京","张三"));    
         list.add(new Student("003","北京","李四"));    
         list.add(new Student("004","北京","李四"));        
         list.add(new Student("005","北京","王五")); 
         list.add(new Student("006","北京","赵六")); 
         list.add(new Student("007","北京","张三"));    
         list.add(new Student("008","北京","张三")); 
    }
    public Test2()
    {
    fill();
    }
    public String findCount()
    {
    Map<Student,Integer> map=new HashMap<Student,Integer>();//定义map,用来存储list中出现元素的次数
    Iterator<Student> list_iterator=list.iterator();
    outer:
    while(list_iterator.hasNext())//循环list
    {
    Student list_s=list_iterator.next();
    Set<Student> hs=map.keySet();
    Iterator<Student> set_iterator=hs.iterator();
        while(set_iterator.hasNext())  //在map之中查找是否已装载该Student,如果找到,返回顶部循环
    {
    Student set_s=set_iterator.next();
    if(set_s.s_equals(list_s))
    {
    map.put(set_s,map.get(set_s)+1);
    continue outer;
    }
    }
    map.put(list_s,1);//如果没找到,则将该元素加入map,计数为1
    }
    return map.toString();
    }
      public static void main(String[] args) 
      { 
      Test2 t2=new Test2();
      System.out.println(t2.findCount());
      } 
      
      

    class Student { 
    private String code = ""; 
    private String name = ""; 
    private String comefrom =""; 
    private  ArrayList<String> next_code=new ArrayList<String>();
    public  Student(String code,String comefrom,String name){ 
    this.code = code; 
    this.comefrom = comefrom; 
    this.name = name; 

    public String getCode() { 
    return code; 

    public String getName() { 
    return name; 

    public String getComefrom() { 
    return comefrom; 

    public int HashCode()
    {
    return new String(code+name+comefrom).hashCode();
    }
    public boolean equals(Object o)
    {
    return s_equals(o)&&(((Student)o).code.equals(this.code));
    }
    public boolean s_equals(Object o)
    {
    if(!(Student.class.isInstance(o)))
    {
    return false;
    }
    Student so=(Student)o;
    boolean b=so.name.equals(this.name)&&so.comefrom.equals(this.comefrom);
    if(b)
    {
    next_code.add(so.code);
    return true;
    }
    return false;
    }
    public String toString()
    {
    return name+" "+comefrom+" "+code+","+next_code;
    }

    //一个小错误终于找出来了。真郁闷~不过个人对这个版本充满信心~
      

  18.   


    public class Student {    private String code = "";
        private String name = "";
        private String comefrom = "";    public Student() {
        }    public String getCode() {
            return code;
        }    public void setCode(String code) {
            this.code = code;
        }    public String getName() {
            return name;
        }    public void setName(String name) {
            this.name = name;
        }    public Student(String code, String comefrom, String name) {
            this.code = code;
            this.comefrom = comefrom;
            this.name = name;
        }    public String getComefrom() {
            return comefrom;
        }    public void setComefrom(String comefrom) {
            this.comefrom = comefrom;
        public class Count {
        private List list = new ArrayList();
        private String stuName;    public Count(String stuName) {
            this.stuName = stuName;
        }
        
        public void add(Student stu)
        {
            list.add(stu);
        }    public int size()
        {
            return list.size();
        }    public Iterator iterator()
        {
            return list.iterator();
        }    public String getStuName() {
            return stuName;
        }    
    }public class CustomList {
        private HashMap map = new HashMap();    public void add(Student stu)
        {
            Count obj = (Count)map.get(stu.getName());
            if(obj == null)
            {
                Count count = new Count(stu.getName());
                count.add(stu);
                map.put(stu.getName(), count);
            }else
            {
                obj.add(stu);
            }
        }
        
        public Iterator iterator()
        {
            return map.values().iterator();
        }    public static void main(String args[])
        {
            CustomList list = new CustomList();
            list.add(new Student("001","北京","张三"));
            list.add(new Student("002","北京","张三"));
            list.add(new Student("003","北京","李四"));
            list.add(new Student("004","北京","李四"));
            list.add(new Student("005","北京","王五"));
            list.add(new Student("006","北京","赵六"));
            list.add(new Student("007","北京","张三"));
            list.add(new Student("008","北京","张三"));        Iterator it = list.iterator();        while(it.hasNext())
            {
                Count count = (Count)it.next();
                Iterator itStu = count.iterator();
                System.out.print(count.getStuName()+"重复个数是"+count.size()+"个,code是");
                while(itStu.hasNext())
                {
                    Student stu = (Student)itStu.next();
                    System.out.print(stu.getCode()+",");
                }
                System.out.println();
            }
        }}
      

  19.   

    public static void main(String[] args) {
            List list = new ArrayList();
            list.add(new Student("001", "北京", "张三"));
            list.add(new Student("002", "北京", "张三"));
            list.add(new Student("003", "北京", "李四"));
            list.add(new Student("004", "北京", "李四"));
            list.add(new Student("005", "北京", "王五"));
            list.add(new Student("006", "北京", "赵六"));
            list.add(new Student("007", "北京", "张三"));
            list.add(new Student("008", "北京", "张三"));        Student stu = null;
            List names = new ArrayList();
            for (int i = 0; i < list.size(); i++) {
                int count = 1;
                StringBuilder codes = new StringBuilder();
                stu = (Student) list.get(i);
                codes.append(stu.getCode());
                for (int j = i + 1; j <list.size(); j++) {
                    Student stu2 = (Student) list.get(j);
                    if (names.contains(stu2.getName())) {
                        break;
                    } else if (stu.getName().trim().equalsIgnoreCase(stu2.getName().
                            trim())) {
                        count++;
                        codes.append("+");
                        codes.append(stu2.getCode());
                    }
                }
                if (!names.contains(stu.getName()))
                    System.out.println(stu.getName() + ":重复个数是" + count + "个,code是" +
                                       codes.toString());
                names.add(stu.getName());
            }