繁体   English   中英

排序链接项,Hashmap或linkedhashmap或任何其他排序方法哪个更好?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM