黑马程序员技术交流社区

标题: TreeMap 索引 [打印本页]

作者: 雷丹    时间: 2013-10-24 22:03
标题: TreeMap 索引
大家知道在java中class TreeMap是根据其键的自然顺序进行排序,那如何能够知道指定键值对在整个TreeMap的索引值。例如以下代码:

TreeMap<String, String> tmp = new TreeMap<String, String>();
tmp.put("a", "aaa");
tmp.put("b", "bbb");
tmp.put("c", "ccc");
tmp.put("d", "cdc");

Iterator<String> iterator_2 = tmp.keySet().iterator();
while (iterator_2.hasNext()) {
Object key = iterator_2.next();
System.out.println("tmp.get(key) is :" + tmp.get(key))

输出结果是:
tmp.get(key) is :aaa
tmp.get(key) is :bbb
tmp.get(key) is :ccc
tmp.get(key) is :cdc

问题就是想知道("c", "ccc")这个键值对在tmp中的索引。

结果大家都知道是2(第一个为0)

有没有简便的方法来获取该索引号,多谢。
作者: 漫步人    时间: 2013-10-24 22:26
1.转换成List,通过List的方法int indexOf(Object o) 获取Entry的index
list=new ArrayList(treeMap.entrySet());
新建ArrayList时使用Entry类型,在调用List的indexOf(Object o)时,要根据treemap中的key来索引list中的序号.
2.treeMap(二分查找法)查找效率高,在查找过程中,内存自动通过索引到相应的区域查到元素,一般我们不需要知道起索引的位置,我们关注的是结果,如果要确定知道位置,那就选用其他的数据结构,
  希望对你有帮助,谢谢!
作者: 终结者    时间: 2013-10-24 23:32
TreeMap是可以接收一个比较器的,如果比较器中用于排序的又是另一种方法那么输出的结果又是不一样,相同的键值的索引值不同,所以本人感觉应该根据比较后的结果查找索引值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2