我有一个用户名单。其中一些用户有第一个存在而其他用户有第二个。所以我想要的是显示这个列表首先它按排序顺序显示存在= 1的用户,然后按排序顺序显示存在= 2的用户。这里排序是根据用户的名字完成的。目前我能够完成所有这些工作,但需要很长时间才能完成,因为列表中有许多用户大约250个。此外,用户的存在可以随时更改。我有一个套接字连接来监听那个,那个时候我还需要列出所有内容以显示更新的用户数据。如何以较少的时间和不使应用程序挂起的方式执行此操作?
这是我目前正在做的事情:
List<User> us = new ArrayList<User>();
int num = model[j].getSize();
String[] strArr = new String[num];
for (int i = 0; i < num; i++) {
strArr[i] = ((User)model[j].get(i)).getName();
if(!isDuplicateSortedUser(strArr[i], us))
us.add((User)model[j].get(i));
}
sortArray(Collator.getInstance(), strArr);
User user;
List<User> temp2 = new ArrayList<User>();
List<User> temp1 = new ArrayList<User>();
for (String string : strArr) {
for (int i = 0; i < num; i++) {
user = (User) us.get(i);
if(user.getName().equals(string)){
if(!isDuplicateSortedUser(user.getUserid(), temp2) && !temp2.contains(user) && !temp1.contains(user)){
if(user.getPresence().toLowerCase().equals("1st"))
temp2.add(user);
else
temp1.add(user);
}
}
}
}
int l=0;
for (User user2 : temp1) {
model[j].setElementAt(user2, l);
l++;
}
for (User user2 : temp2) {
model[j].setElementAt(user2, l);
l++;
}
此处model
是DefaultListModel
的{{1}}。 sortArray方法是:
JList
如何优化上述代码?
答案 0 :(得分:1)
将用户放入ArrayList并使用内置的Java排序功能:http://download.oracle.com/javase/6/docs/api/java/util/Collections.html
这将调用一个mergesort,它比你写的更有效。
你想在第一个for循环中做什么?
据我所见,您只需要执行以下操作:
答案 1 :(得分:0)
如@Jeroen所述,实施Comparable
是首选方法。您还可以Comparator
中所示实施{{1}}或使用RecordComparator
。