A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雷丹 中级黑马   /  2013-10-24 22:03  /  1591 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家知道在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)

有没有简便的方法来获取该索引号,多谢。

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
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(二分查找法)查找效率高,在查找过程中,内存自动通过索引到相应的区域查到元素,一般我们不需要知道起索引的位置,我们关注的是结果,如果要确定知道位置,那就选用其他的数据结构,
  希望对你有帮助,谢谢!

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
TreeMap是可以接收一个比较器的,如果比较器中用于排序的又是另一种方法那么输出的结果又是不一样,相同的键值的索引值不同,所以本人感觉应该根据比较后的结果查找索引值

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马