Java Map中常遇到的几个问题 2.迭代Map

1.将Map转化成List

Map接口提供了三种collection:key set,value set 和 key-value set,每一种都可以转成List。如下:

2.迭代Map

最高效的遍历map的每个entry的方法如下:

也可以使用iterator,特别是JDK 1.5之前。

3.根据key对map进行排序

可以将Map.Entry放入一个list,然后自己实现Comparator来对list排序。

可以使用SortedMap。SortedMap的一个实现类是TreeMap。TreeMap的构造器可以接受一个Comparator参数。如下:

注:TreeMap默认对key进行排序。

4. 根据value对map进行排序

如果map中的value不重复,可以通过反转key-value对为value-key对来用上面的3中的TreeMap方法对其排序。该方法不推荐。

5. 初始化一个不可变Map

6. HashMap、TreeMap和HashTable的区别

Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。

TreeMap是有序的,HashMap和HashTable是无序的。

Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。

这就意味着Hashtable是线程安全的,HashMap不是线程安全的。HashMap效率较高,Hashtable效率较低。 如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。

Hashtable不允许null值,HashMap允许null值(key和value都允许)

父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap

Hashtable中hash数组默认大小是11,增加的方式是 old*2+1。

HashMap中hash数组的默认大小是16,而且一定是2的指数。

7. 创建一个空的Map

如果希望该map为不可变的,则:

```map = Collections.emptyMap();```  否则:  ```map = new HashMap();```

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏desperate633

LeetCode 17. Letter Combinations of a Phone Number题目分析代码

以上的答案是按照词典编撰顺序进行输出的,不过,在做本题时,你也可以任意选择你喜欢的输出顺序。

711
来自专栏Python爬虫实战

LeetCode刷题:Array系列之Remove Element

#include <iostream> #include <vector> using namespace std;

791
来自专栏恰同学骚年

C#基础与常用数据结构学习笔记

  接口相当于没有方法实现的抽象类,接口方法不要加各种访问级别:例如public,private等。

933
来自专栏轮子工厂

深入理解Java中的List、Set与Map集合

694
来自专栏zaking's

用js来实现那些数据结构10(集合02-集合的操作)

  前一篇文章我们一起实现了自定义的set集合类。那么这一篇我们来给set类增加一些操作方法。那么在开始之前,还是有必要解释一下集合的操作有哪些。便于我们更快速...

3196
来自专栏机器学习和数学

[数据结构与算法] 链接表总结

上一次说到了顺序表,链接表和顺序表一样,也是线性表。那为什么有了线性表还要有链接表呢?总之就是当数据过大时,顺序表存在一些存储方面的限制,而链接表比顺序表要更有...

2937
来自专栏Android机动车

Java 基础(四)——集合源码解析 List

前面我们学习了Iterator、Collection,为集合的学习打下了基础,现在我们来学习集合的第一大体系 List。

844
来自专栏非著名程序员

常见面试题六之java系列

做Android开发最重要的是要有一个很好的java基础。所以在我们的面试过程中也会被经常问到有关java的问题,其实在小编看来,如果java基础不好,那开发起...

1836
来自专栏Android知识点总结

Java容器源码攻坚战--第一战:Iterator

891
来自专栏GreenLeaves

C#核编之格式化编程

一、格式化控制台输入输出     1、 在前面的随笔中,会经常看到诸如{0},{1}之类的标记嵌入在字符串变量中。.NET引入一种字符串格式化的新风格。与C的p...

18210

扫码关注云+社区