【发布时间】:2014-06-17 13:17:45
【问题描述】:
我有一个名为 Friend 的 Java 类
public class Friend {
public String friendsUserName;
public boolean isFavorite;
public boolean isFriend;
}
我从包含此类Friend 的JsonArray 的服务器获得Json 文件。我使用Gson 类来解析Json 并将其映射到ArrayList<Friend>。我必须按以下方式对数组进行排序
- 顶级元素是
Friend,分别是isFavorite和isFriend - 然后
ArrayList包含剩余的Friend,他们只是isFriend - 最后
ArrayList包含Friend其中isFriend是False。
所以我可以使用ComparatorChain中描述的方法
或者我可以使用以下方式正确排序ArrayList<Friend>
public ArrayList<Friend> friendsList;
public void sortArrayList() {
ArrayList<Friend> favoriteList = new ArrayList<Friend>();
ArrayList<Friend> friendOnlyList = new ArrayList<Friend>();
ArrayList<Friend> nonFriendList = new ArrayList<Friend>();
for (int length = friendsList.size(), i = length - 1; i >= 0; i--) {
Friend friend = friendsList.get(i);
if (friend.isFriend) {
if (friend.isFavorite) {
favoriteList.add(friend);
} else {
friendOnlyList.add(friend);
}
} else {
nonFriendList.add(friend);
}
friendsList.remove(i);
}
addAllAndClear(favoriteList);
favoriteList = null;
addAllAndClear(friendOnlyList);
friendOnlyList = null;
addAllAndClear(nonFriendList);
nonFriendList = null;
}
public void addAllAndClear(ArrayList<Friend> updatedList) {
Collections.sort(updatedList, nameComparator);
friendsList.addAll(updatedList);
updatedList.clear();
updatedList = null;
}
Comparator<Friend> nameComparator = new Comparator<FriendListResponse.Friend>() {
@Override
public int compare(Friend lhs, Friend rhs) {
return lhs.friendsUserName.compareTo(rhs.friendsUserName);
};
};
Efficiency 明智的是我应该遵循ComparatorChain 还是我自己的方法。我正在为Android 平台开发这个,所以Memory Management 和Efficiency 是最重要的。
附言我不擅长使用工具比较Efficiency。
【问题讨论】:
-
其他发帖者已经给出了潜在的解决方案,但是在优化性能时可以参考的一个很好的资源是 Android 文档中提供的 Performance Tips article
标签: java android sorting arraylist