排序多个ArrayLists建议?

时间:2013-09-27 05:37:21

标签: java

嘿有男人和女孩。

背景: 我正在做一个高分项目的家庭作业,要求5个名字和5个分数。在输入具有相应分数的名称之后,程序按最高分数对两个ArrayLists进行排序。最后,它按排序顺序显示名称及其分数。

问题: 我有一段时间试图对ArrayLists进行排序,你对ArrayLists的排序有什么建议吗?

代码:

import java.util.*;

public class Assignment6
{
    public static void main(String args[])
    {
        ArrayList<String> names = new ArrayList();
        ArrayList<Integer> scores = new ArrayList();

        initializeArrays(names, scores);
        //sortArrays(names, scores);
        displayArrays(names, scores);
    }

        public static void initializeArrays(ArrayList names, ArrayList scores)
        {
            Scanner in = new Scanner(System.in);
            for(int i=0; i<5; i++)
            {
                System.out.println("Enter the name for score # " + (i+1) + ": ");
                names.add(in.next());
                System.out.println("Enter the score for score # " + (i+1) + ": ");
                scores.add(in.next());
            }
        }

        public static void sortArrays(ArrayList names, ArrayList scores)
        {
            for(int i=0; i<5; i++)
            {
                if(scores[i] < scores[i+1])
                {
                    Collections.swap(scores,a, b);
                    Collections.swap(names,a, b);

                }
            }
        }

        public static void displayArrays(ArrayList names, ArrayList scores)
        {
            System.out.println("Top Scorers: ");
            System.out.println(names);
            System.out.println(scores);
        }


}

3 个答案:

答案 0 :(得分:4)

创建一个包含字段的对象:namescore implements Comparable 然后一个ArrayList使用Collections.sort(list);

答案 1 :(得分:1)

您可以将得分和名称包装到一个对象中,并将其存储在列表中。

class Result implements Comparable<Result>{

    private String name;

    private int score;

    public String getName() {
        return name;
    }

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

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    public int compareTo(Result other) {
        return this.score - other.score;
    }

}

现在,您可以使用Collections.sort(List<Result>)根据最高分数对其进行排序。

答案 2 :(得分:0)

好吧,你想打印类似A-{Bob, Alex, ...},的东西,其中Bob是一个名字而A是范围,你可以使用Alex描述的一个对象来做,但如果它的家庭工作,我认为你的老师想要看一些计算机科学数据结构,在这种情况下Associative_array会更好。您可以在您身边实现它或使用Java实现。 Java为我们提供了Map [T,V]和实现,对于你的例子是TreeMap,其中T - 是范围,V - 是Name的列表,因为很多人可以拥有相同的范围。 所以,结果结构将是那样的

Map<String, List<String>> sortedScopes = new TreeMap<>();

并使用:

List<String> names  = sortedScopes.get(scope);
if(names == null){
  names = new ArrayList<>();
sortedScopes.put(scope, names);
}

names.add(name)

在该解决方案中,您只需要初始化和显示2个方法, 按范围排序将按需执行