剑克锋 2023-02-13 23:25 采纳率: 33.3%
浏览 35

关于#java#的问题:关于集合框架hashset的使用问题

求佬帮忙,这样做为什么为什么不对

本人思路是先把数据存到数组里,将数组从尾到头再添加到hashset里进行消除重复项,消除完重复项后再将结果放到另一个数组里,再将其反向输出,测试样例是正确的,但提交结果不对

img

img

img



    import java.util.*;
    import java.math.BigInteger;
    import java.math.*;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import static java.lang.Math.abs;
    import static java.lang.Math.log;

    class Students {
        private String name;
        private String age;
        private String id;
        private String sex;
        public Students(String id,String name,String age,String sex) {
            this.id = id;
            this.name = name;
            this.age=age;
            this.sex=sex;
        }
        public int hashCode() {
            return id.hashCode();

        }
        public boolean equals(Object obj) {
            if(this==obj) return true;
            if(!(obj instanceof Students)){
                return false;
            }
            Students stu=(Students) obj;
            return this.id.equals(stu.id);
        }

        public String toString(){
            return id+" "+name+" "+age+" "+sex;
        }

    }

    public class Main {
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            int n=sc.nextInt();
            LinkedHashSet set=new LinkedHashSet();
            Students[] m=new Students[n];

            for(int i=0;i<n;i++){
                String id=sc.next();
                String name=sc.next();
                String age=sc.next();
                String sex=sc.next();
                m[i]=new Students(id,name,age,sex);
            }
            for(int i=n-1;i>=0;i--) set.add(m[i]);
            System.out.println(set.size());
            Students[] m1=new Students[set.size()];
            Iterator it=set.iterator();
            int t=0;
            while(it.hasNext()){
                Object obj=(Object) it.next();
                m1[t++]=(Students) obj;
            }
            for(int i=set.size()-1;i>0;i--){
                System.out.println(m1[i]);
            }
            System.out.print(m1[0]);

            }
        }
  • 写回答

2条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-02-13 23:50
    关注

    你这也复杂了,内存占用太多了

    简单的思路:

    1)用Map<String, Set<String>>键为学号,值为学生信息,用set存储
    (2)添加数据直接用 map的put方法,相同的键会覆盖对应的值。
    (3)最后遍历map.values 输出学生信息,集合的长度就是 不重复的学生的数目
    
    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 2月13日
  • 创建了问题 2月13日

悬赏问题

  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误
  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。