2

sort メソッド以外はすべて動作するようになりました。Student の最初の属性に基づいて、HashMap 内の Student を並べ替える必要があります。追加中ではなく、すべての生徒を HashMap に追加した後に sort メソッドを実行する必要があります。

package HashMap;

        import java.io.InputStream;
        import java.util.HashMap;
        import java.util.HashSet;
        import java.util.Scanner;

        public class clubMapping {
            HashMap<String, HashSet<Student>> map = new HashMap<String, HashSet<Student>>();

            public clubMapping(String clubName) {
                InputStream is = getClass().getClassLoader().getResourceAsStream(
                        "student.txt");
                Scanner scan = new Scanner(is);
                while (scan.hasNext())
                    add(scan.next(), scan.next(), Integer.parseInt(scan.next()),
                            scan.next());
                scan.close();
                System.out.println(map);
                System.out.println();
                System.out.println(map.get(clubName));
            }

            public void add(String last, String first, Integer id, String club) {
                HashSet<Student> set = new HashSet<Student>();
                if (!map.containsKey(club)) {
                    set.add(new Student(last, first, id));
                    map.put(club, set);
                } else {
                    set = map.get(club);
                    set.add(new Student(last, first, id));
                }
            }

            public static void main(String[] args) {
                new clubMapping("Math");
            }
        }

    package HashMap;

    public class Student {
        String last, first;
        Integer id;

        public Student(String l, String f, Integer i) {
            last = l;
            first = f;
            id = i;
        }

        public String toString() {
            return last + " " + first + " " + id;
        }
    }
4

1 に答える 1

1

学生セットには a のTreeSet代わりに aを使用する必要があります。HashSetツリー セットは暗黙的にソートされますが、ハッシュ セットはそうではありません。

public void add(String last, String first, Integer id, String club) {
    TreeSet<Student> set = new TreeSet<Student>(studentComp);
    if (!map.containsKey(club)) {
        set.add(new Student(last, first, id));
        map.put(club, set);
    } else {
        set = map.get(club);
        set.add(new Student(last, first, id));
    }
}

ただし、以下に示すように、並べ替えに使用するコンパレータを定義する必要があります。

private static Comparator<Student> studentComp = new Comparator<Student>() {
    @Override
    public int compare(Student s1, Student s2) {
        return (s1.last.compareTo(s2.last));
    }
};

また、上で行ったように直接アクセスするのではなく (クラスで現在許可されているように)、学生の属性を getter/setter メソッドでカプセル化する必要があります。

于 2012-12-08T02:02:37.703 に答える