![](/img/trans.png)
[英]HashMap or TreeMap or LinkedHashMap which one is fastest to iterate over?
[英]which one is better to sort linked items , Hashmap or linkedhashmap or any other?
我有2个来自Twitter JSON的字符串“ follower_count”和“ user id”
我需要一些东西按照喜欢的数量从高到低的顺序对它们进行排序,即首先放置更大的关注者数量,然后访问其“用户ID”链接。 并从1到10打印。
在Java / android中使用hashmap或链接的hashmap或任何其他方法做到这一点的最佳方法?
更新:-我使用了建议的排序地图,实际上是树图
到目前为止,这是我的进度:
//get the first status
status = statuses.get(0);
//get id of the status
long l= status.getId();
//get retweeters id
ki =twitter.getRetweeterIds(l, 100, -1);
long[] id=ki.getIDs();
//for every retweeter id, get followers count and put in treemap
TreeMap<Integer,Long> tm = new TreeMap<Integer, Long>();
for(int k=0;k<=id.length;k++)
{
u = twitter.showUser(id[k]);
follower=u.getFollowersCount();
tm.put(follower,id[k] );
}
NavigableMap<Integer,Long> reverseTreeMap = tm.descendingMap();
您是否尝试过SortedMap ? 它提供其键的排序。 http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html
如果您只想专门针对排序性能,则HashTable或TreeMap(实际上是红黑二叉树)可能是排序性能的重要资源,但是在添加时,它们比其他一些数据结构要慢(在TreeMap的情况下,删除)项。
除此之外,您也可以尝试使用SortedMap。
实际上,它们之间总是存在折衷,就好像它由可以通过某些键值查找的记录组成一样,那么Map可能是一个很好的数据结构。 如果只是事物列表,则使用列表。 另一方面,例如,ArrayList和LinkedList具有不同的性能约束。 如果您需要按索引查找元素,而而不是LinkedList,则ArrayList是有效的。 另一方面,如果需要在列表中的随机位置插入元素,而LinkedList则不是,则LinkedList是有效的。 不同集合实现的API文档详细描述了这些差异。
除非您有大量的对象,否则我建议您将对象放入ArrayList
。 根据自定义比较器对它进行排序并完成它。 对于像您这样的小名单,使用更复杂的东西通常不会更快或更容易。
-编辑-
我还建议使用ArrayList
作为默认值,而不是LinkedList
。 LinkedList
的用例非常狭窄。
最终,我能够通过使用其他答案中建议的Treemaps(排序的地图)来做到这一点,关于tree map的事情是它们通过键自动对值进行排序。 即
Treemap<Integer,String> tree =new Treemap<Integer, String>();
//now put items in it
tree.put(5,"hello" );
tree.put(4,"hello again" );
tree.put(6,"Goodbye" );
那么当我们将其输出时,它就会变成“
4=hello again
5=hello
6=Goodbye
现在,最后的任务是颠倒顺序,
NavigableMap<Integer,String> reverseTreeMap = tree.descendingMap();
这是我的最终代码,这就是我解决问题的方式:
//Using treemap to sort retweeters according to their followers
TreeMap<Integer,String> tm = new TreeMap<Integer, String>();
try{
for(int k=0;k<10;k++)
{
publishProgress(5);
Log.i(a, "treemap followers"+k);
u = twitter.showUser(id[k]);
follower=u.getFollowersCount();
url=u.getProfileImageURL();
tm.put(follower,url );
}
}
catch(Exception e)
{
Log.e(a, e.toString());
}
Log.i(a, "Done treemap");
//Reverse the order of the treemap
Log.i(a, "Reversing Treemap");
NavigableMap<Integer,String> reverseTreeMap = tm.descendingMap();
publishProgress(5);
//Put treemap values in string
s=reverseTreeMap.values().toString();
s=s.replace("[", "");
s=s.replace("]", "");
//make array of string s
s=s.split(",");
Log.i(a, "Done");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.