java Map及Map.Entry详解介绍

Java中的Map接口是一种键值对映射的数据结构,它可以存储在一个对象中,以便您可以快速检索一个值,而无需检索整个集合。在Java中,有多种实现方式,如HashMap、TreeMap、LinkedHashMap等。Map接口中的key和value都可以是任何对象类型,包括基本数据类型。但是对于value来说,它不能是null,但是对于key来说是可以的(在HashMap中)。

Map接口中还有一个比较重要的内部类Entry,它描述一个Map中的一个映射项,也即是键值对,Entry包含两个属性,一个是key,一个是value。在Map中,我们可以通过entrySet()方法获取一个set集合,里面包含了所有的Entry对象,我们可以通过这些Entry对象获取到Map中存储的键值对。

下面我们来简单介绍一下常用的Map接口实现类:

1. HashMap

HashMap是基于哈希表实现的Map,它对于键的映射关系存储在数组中,通过哈希算法,可以快速的定位到该数组中的元素。它是线程不安全的,不能保证元素的顺序。

下面是HashMap的一个简单使用例子:

```java

Map map = new HashMap<>();

map.put("name", "张三");

map.put("age", "22");

map.put("gender", "男");

for(Map.Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + " : " + entry.getValue());

}

```

输出:

```

name : 张三

age : 22

gender : 男

```

2. TreeMap

TreeMap是基于红黑树结构的Map,它能够根据键的自然顺序或者指定的Comparator顺序进行排序。TreeMap是线程不安全的,因为它没有同步机制,如果多个线程同时访问它可能会导致数据不一致等问题。

下面是TreeMap的一个简单使用例子:

```java

Map map = new TreeMap<>();

map.put(3, "张三");

map.put(1, "李四");

map.put(2, "王五");

for(Map.Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + " : " + entry.getValue());

}

```

输出:

```

1 : 李四

2 : 王五

3 : 张三

```

3. LinkedHashMap

LinkedHashMap是HashMap的一个子类,在HashMap基础上增加了一个链表维护插入顺序,因此可以保证按照插入顺序遍历。LinkedHashMap在迭代访问Map时,它可以按照访问的顺序依次遍历。

下面是LinkedHashMap的一个简单使用例子:

```java

Map map = new LinkedHashMap<>();

map.put("name", "张三");

map.put("age", "22");

map.put("gender", "男");

for(Map.Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + " : " + entry.getValue());

}

```

输出:

```

name : 张三

age : 22

gender : 男

```

4. Hashtable

Hashtable是一个线程安全的Map实现,但是在性能上不如HashMap,因为它的所有操作都是同步的。Hashtable不允许null值或null键,而HashMap可以。

下面是Hashtable的一个简单使用例子:

```java

Map map = new Hashtable<>();

map.put("name", "张三");

map.put("age", "22");

map.put("gender", "男");

for(Map.Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + " : " + entry.getValue());

}

```

输出:

```

name : 张三

age : 22

gender : 男

```

5. EnumMap

EnumMap是一种特定于枚举类型键的专用Map实现。它提供了在枚举类型键上的高性能和低噪声,而通用的Map实现不能保证。

下面是EnumMap的一个简单使用例子:

```java

enum WeekDay {Monday, Tuesday, Wednesday, Thursday, Friday}

Map map = new EnumMap<>(WeekDay.class);

map.put(WeekDay.Monday, "星期一");

map.put(WeekDay.Tuesday, "星期二");

map.put(WeekDay.Wednesday, "星期三");

for(Map.Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + " : " + entry.getValue());

}

```

输出:

```

Monday : 星期一

Tuesday : 星期二

Wednesday : 星期三

```

以上就是常用的Map实现类,当然Java还有其他的Map实现类,如果需要了解更多,可以查看Java官方文档。

下面我们来介绍一下Map.Entry的常用方法:

1. getKey():返回该项的键。

2. getValue():返回该项的值。

3. setValue(V value):将该项的值设置为指定值。

下面是一个Map.Entry的简单使用例子:

```java

Map map = new HashMap<>();

map.put("name", "张三");

map.put("age", "22");

map.put("gender", "男");

for(Map.Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + " : " + entry.getValue());

entry.setValue("***");

}

for(Map.Entry entry : map.entrySet()) {

System.out.println(entry.getKey() + " : " + entry.getValue());

}

```

输出:

```

name : 张三

age : 22

gender : 男

name : ***

age : ***

gender : ***

```

从输出结果可以看出,我们通过entry.setValue()方法将原有的值都修改为了`***`。

总结:

通过本篇文章的介绍,我们了解了Java中常用的Map接口实现类以及Map.Entry的使用方法和常用方法。在实际开发中,根据不同的业务场景,选取合适的Map实现类可以大大提高程序的性能和效率。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(5) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部