Пытаясь использовать Comparable, я довольно новичок в программировании и никогда не сортировал ArrayList. Я рассмотрел некоторые другие примеры переполнения стека и посмотрел на Java Doc, но это довольно запутанно, я не уверен, как применить его к моей программе.Использование сопоставления для сортировки ArrayList
По существу у меня есть два класса: класс Personality и класс PersonalityList , Класс PersonalityList включает массив персонажей, называемый личностями, в котором хранится множество объектов личности в списке массивов.
Мне нужно отсортировать его по количеству голосов, которое имеет каждая Личность. Метод top (int topValue) должен возвращать новый массив длины topValue, с объектами Personality с наивысшим количеством голосов.
Я понимаю, что мне нужно использовать некоторые Comparable в моем классе Personality, но не уверен, как это сделать.
Это мой PersonalityList класс до сих пор:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Collections;
public class PersonalityList
{
private ArrayList<Personality> personalities; //Create ArrayList of Personality, called personalities.
private ArrayList<Personality> sortedPersonalities;
/**
* Constructor for objects of class PersonalityList
*/
public PersonalityList()
{
personalities = new ArrayList<Personality>(); //Initialise personalities ArrayList.
sortedPersonalities = new ArrayList<Personality>();
}
/**
* Adds a personality to the ArrayList of Personality, called personalities.
*/
public void addPersonality(Personality personality)
{
personalities.add(personality);
}
/**
* Returns the number of Personality objects in the ArrayList
*/
public int getSize()
{
return personalities.size();
}
/**
* Lists the details of all the Personality objects stored in the ArrayList
*/
public void list()
{
System.out.println("Personality List");
for(Personality personality : personalities) { //Iterates through each personality in ArrayList
System.out.println(personality.getDetails());
}
System.out.println();
}
/**
* Adds one vote to the personality which matches the name entered into the method
*/
public void voteFor(String name)
{
boolean nameFound = false; //Boolean variable to identify if the personality has been found
int index = 0;
while (index < personalities.size() && !nameFound) {
Personality personality = personalities.get(index);
String compName = personality.getName();
if (compName.equals(name)) { //Adds a vote if the name is found
personality.increaseVotes(1);
nameFound = true;
}
index++;
}
if (nameFound == false) { //Error message if name not found
System.out.println(name + " could not be found.");
}
}
/**
* Removes personalities if they have less votes than the parameter value
*/
public void shortlist(int minimumVotes)
{
Iterator<Personality> it = personalities.iterator();
while(it.hasNext()) {
Personality personality = it.next();
int currentP = personality.getVotes();
if (currentP < minimumVotes) {
it.remove();
}
}
}
/**
*
*/
public Personality top(int topValue)
{
int index = 0;
int listSize = personalities.size();
if (topValue > listSize) {
topValue = listSize;
}
if(listSize > 0) {
//Coppies the ArrayList personalities to the sortedPersonalities ArrayList
while(index < topValue) {
Personality sortedPersonality = personalities.get(index);
sortedPersonalities.add(sortedPersonality);
System.out.println(sortedPersonality.getDetails());
index++;
}
Collections.sort(sortedPersonalities, Collections.reverseOrder(new Personality.votesComparator()));
System.out.println("Sorted by Votes");
System.out.println("\t" + people);
}
else {
System.out.println("No personalities are currently in the Array List");
}
return sortedPersonalities ;
}
}
Спасибо заранее.
Итак, мне нужно создать новый класс для компаратора? – JL9