Java中Map相关的6大问题——每个开发人员都要注意
通常情况下Map是一种数据结构组成的一组键值对,Map中的key值是唯一的;Map是开发过程中经常被用到的一种数据结构,如何正确使用它,是每个Java开发人员都要掌握的,下面整理了使用Map的一引起注意事项。
网络配图 1、Map转为一个List 在Java中Map接口提供了三个集合视图:key set,value set,和key-value set;它们可以使用构造函数或addAll()方法转化为一个List,例子代码如下:
// key list
List keyList =newArrayList(map.keySet());
// value list
List valueList =newArrayList(map.values());
// key-value list
List entryList =newArrayList(map.entrySet());
2、遍历Map的方法 遍历Map是Java中最基本的操作,具体使用方法通过例子进行说明,代码如下: 第一种方法:
for(Entry entry: map.entrySet()){// 返回键值
K key = entry.getKey();//返回value值
V value = entry.getValue();}
第二种方法:
Iterator itr = map.entrySet().iterator();while(itr.hasNext()){
Entry entry = itr.next();//返回键值
K key = entry.getKey();//返回value值
V value = entry.getValue();}
网络配图 2、Map中key的操作 Map中的key也是一个用的比较多的操作,一种方法是把map.entry转换成一个List,例子代码如下:
List list =newArrayList(map.entrySet());
Collections.sort(list, newComparator(){
@Override
publicint compare(Entry e1, Entry e2)
{return e1.getKey().compareTo(e2.getKey());
}
});
另一种方法是使用SortedMap总排序,进一步提供了key,例子代码如下:
SortedMap sortedMap =newTreeMap(newComparator(){
@Override
publicint compare(K k1, K k2){
return k1.compareTo(k2);
}
});
sortedMap.putAll(map);
3、Map中的value值 具体使用通过代码说明,例子如下:
List list =newArrayList(map.entrySet());
Collections.sort(list, newComparator(){
@Override
publicint compare(Entry e1, Entry e2){
return e1.getValue().compareTo(e2.getValue());
}
});
4、如何初始化一个static final的Map 开发过程中需要用到一个线程安全的Map时,Map就需要保持不变,实例代码如下:
public class Test {
private static final Map map;
static{
map =newHashMap();
map.put(1, "one");
map.put(2, "two");
}}
public class Test {
private static final Map map;
static{
Map aMap =newHashMap();
aMap.put(1, "one");
aMap.put(2, "two");
map =Collections.unmodifiableMap(aMap);
}
}
网络配图 5、HashMap、TreeMap和Hashtable之间的区别 Java中主要实现了三种接口:HashMap,TreeMap,Hashtable;最重要的区别是: 通过一个列表图进行说明 | HashMap | Hashtable | TreeMap ------------------------------------------------------- 迭代顺序 | 否 | 否 | 是 空键—值 | 是-是 | 否-否 | 否-是 线程安全 | 否 | 是 | 否 使用性能 | O(1) | O(1) | O(log n) 实用性 | 大量 | 大量 | 少量 6、如何创建一个空的Map 如果要求Map是不可变的,则使用Map =Collections.emptyMap(); 否则可以使用任何实现方法,例如Map =newHashMap(); 其他方法通过查API获取 。
- CentOS环境下Docker私有仓库搭建
- spark三种连接join
- 用firebug给firefox添加信任链接
- Elasticsearch索引别名、Filtered索引别名、Template
- 追本溯源:Oracle 只读表空间的探索实践
- firefox查看微信公众平台的数据分析时就出现不信任链接怎么办?
- spark-streaming集成Kafka处理实时数据
- 使用spark与MySQL进行数据交互的方法
- python分布式环境下的限流器
- commons-pool与commons-pool2连接池(Hadoop连接池)
- Glusterfs 文件系统
- 时过境迁:Oracle跨平台迁移之XTTS方案与实践
- Kazoo Python Zookeeper 选主
- Linux Redis集群搭建与集群客户端实现
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- IO之Formatted IO
- 51. Vue名称案例-使用watch监听数据变化
- 安装KubeSphere
- Netty中级篇
- Flutter-初试牛刀,入门篇
- JS获取图片URL并截取文件名和后缀
- 10X genomics bam文件的格式
- Flutter性能优化
- PWN - Use After Free
- windows环境的python踩坑记
- uniapp上传图片至服务器,获得在线图片链接预览(实战)
- linux中的字符串切片
- 视频配音篇,如何使用百度翻译将文本转换为mp3语音?
- Objective-C的hook方案/ Method Swizzling
- Python爬虫:无账号无限制获取企查查信息