哪一个更好地排序链接的项目,Hashmap或linkedhashmap或任何其他?

时间:2014-03-24 11:22:09

标签: java hashmap concurrenthashmap linkedhashmap

我有两条来自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();

4 个答案:

答案 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");