如何简化我的Java代码?
问题描述:
我对Java很新,并且被困在以下任务中。我被要求在AddressBook类中创建一个方法,该方法返回总ActivityLevel最高的Person对象。如何简化我的Java代码?
我已经创建了getSocialMediaActivityLevel(),maxValue()和findMostSocial()方法。
findMostSocial方法确实会返回我之后的值,但是赋值的描述包含语句“需要您设计一个简单算法并将其集成到现有类中”。看起来我已经使用了大量不必要的代码,但我很不确定如何简化我所做的工作。任何帮助是极大的赞赏。
public class SocialMediaAccount {
private String userID;
private String websiteName;
private String websiteURL;
private int activityLevel;
public SocialMediaAccount(String userID, String websiteName, String websiteURL, int activityLevel) {
this.userID = userID;
this.websiteName = websiteName;
this.websiteURL = websiteURL;
this.activityLevel = activityLevel;
}
public void addSocialMediaAccount(String userID, String websiteName, String websiteURL, int activityLevel) {
SocialMediaAccount account1;
account1 = new SocialMediaAccount(userID, websiteName, websiteURL, activityLevel);
socialMediaAccounts.add(account1);
}
import java.util.ArrayList;
public class Person {
private String firstName;
private String surname;
private String mobile;
private String email;
private ArrayList<SocialMediaAccount> socialMediaAccounts;
//returns the combined ActivityLevel for all the Person's SocialMediaAccounts.
public int getSocialMediaActivityLevel(){
int total = 0;
for(SocialMediaAccount e : socialMediaAccounts){
total += e.getActivityLevel();
}
return total;
}
import java.util.ArrayList;
import java.util.Collections;
public class AddressBook {
private ArrayList<Person> contacts;
public AddressBook(){
contacts = new ArrayList<>();
}
//returns the highest combined ActivityLevel in the ArrayList contacts
public int maxValue(){
ArrayList<Integer> maxActivityLevel = new ArrayList<>();
for(Person e : contacts){
maxActivityLevel.add(e.getSocialMediaActivityLevel());
}
int maxValue = Collections.max(maxActivityLevel);
return maxValue;
}
//returns the Person object in the contacts ArrayList with the highest combined ActivityLevel
public Person findMostSocial(){
for(Person p: contacts){
if(maxValue() == p.getSocialMediaActivityLevel()){
return p;
}
}
return null;
}
答
我想你所需要的就是Quick Sort这里的算法来确定人员名单社交媒体活动的最大值。所以,我建议用实现QuickSort的方法替换maxValue()和findMostSocial()方法。这里有一个这样的implementation供参考。干杯
与其计算最大值然后搜索具有匹配级别的人员,不如考虑只循环一次“联系人”列表。您可以跟踪您目前为止看到的最高活动级别以及拥有该级别的人员,并且只有在列表中的下一个联系人“击败”当前最佳分数时才更新它们。 – CAW
顺便说一句,还有一个简单的改进,您可以在不改变算法的情况下对当前的解决方案做出改进。目前,您在findMostSocial()方法内多次计算maxLevel()。你只需要做一次,将该值存储在一个变量中,然后比较每个人的分数。 – CAW