我有两条来自Twitter JSON" follower_count"和"用户ID"
我需要根据最喜欢的数量按降序对它们进行排序, 即,首先放置更多的追随者计数,然后访问他们的用户ID"链接。 并打印从1到10。
使用hashmap或链接hashmap或其他任何方式在java / android中执行此操作的最佳方法是什么?
更新: - 我按建议使用了排序地图,实际上是Treemap
这是我目前的进展:
//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();
答案 0 :(得分:1)
您是否尝试过 SortedMap ?它提供按键的订购。 http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html
答案 1 :(得分:0)
如果您正在寻找专门的排序性能,HashTable或TreeMap(实际上是一个红黑二叉树)可以成为排序性能的绝佳资源,但它们在添加时比其他一些数据结构慢(并且在TreeMap的情况,删除)项目。
除此之外,您也可以尝试使用SortedMap。实际上总是在两者之间进行权衡,好像它包含可以通过某个键值查找的记录,然后Map可能是一个很好的数据结构。如果它只是一个事物列表而不是使用List。 另一方面 例如,ArrayList和LinkedList具有不同的性能限制。如果需要按索引查找元素,则ArrayList是高效的,而LinkedList则不是。另一方面,如果需要在列表中的随机位置插入元素,则LinkedList是高效的,而ArrayList则不是。不同集合实现的API文档详细描述了这些差异。
答案 2 :(得分:0)
除非您拥有大量的物品,否则我建议您放入物品
ArrayList
。根据自定义Comparator对其进行排序并完成。对于
像你这样的小名单通常会使用更复杂的东西
不快或不容易。
-edit -
我还建议使用ArrayList
作为默认值,而不是LinkedList
。使用
LinkedList
的案例非常狭窄。
答案 3 :(得分:0)
最后我能够通过使用Treemaps(有序地图)按照其他答案中的建议来做到这一点,关于树地图的事情是它们会按键自动对值进行排序。 我是
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");