Map映射—Java实现—LinkedHashMap、HashMap、TreeMap

时间:2021-01-03 16:49:02

映射是一种键值对存储数据结构。
Map接口和List不同的是Map并没有实现Collection接口。
映射数据结构有一个性质:一个键在映射中只出现一次,如果插入同一个键,那么这个键原来的值就会被覆盖。

HashMap是Java的散列表的实现,这个类包含一个内部类Entry,用来表示键值对,元素保存在Entry中。保存键时会调用hashCode方法。

TreeMap是Map接口的另一个实现,这个实现通过二叉树数据结构来实现Map接口。由于TreeMap基于自然排序保存键,因此不会使用hashCode方法,每一个插入TreeMap的元素都会重新调整树的平衡,因此搜索、删除以及后续的插入都可以达到最好的性能O(log n).

LinkedHashMap是Map的一个特殊实现,这个实现的工作方式和HashMap完全相同,因此检索的时间复杂度为O(1),但这个实现有一个特性,那就是键的遍历顺序和插入顺序是相同的。

如果要在多线程之间共享映射实例,那么应该使用ConcurrentHashMap实现。

看一下程序实现:

package map;

import java.util.*;

/**
* DateTime: 2016/10/21 16:51
* 功能:
* 思路:
*/

public class MapDemo {
public static void main(String[] args) {

final Map<String,String> map=new HashMap<>();
final Map<String,String> linkmap=new LinkedHashMap<>();
final Map<String,String> treemap=new TreeMap<>();

map.put("Y","YEN"); linkmap.put("Y","YEN"); treemap.put("Y","YEN");
map.put("L","LEN"); linkmap.put("L","LEN"); treemap.put("L","LEN");
map.put("A","AEN"); linkmap.put("A","AEN"); treemap.put("A","AEN");
map.put("G","GEN"); linkmap.put("G","GEN"); treemap.put("G","GEN");
map.put("F","FEN"); linkmap.put("F","FEN"); treemap.put("F","FEN");


System.out.println("map:");
Iterator iterator=map.entrySet().iterator();
while ( iterator.hasNext() ){
Map.Entry entry= (Map.Entry) iterator.next();
System.out.println(entry.getKey()+" --> "+entry.getValue());
}

System.out.println("linkedmap:");
Iterator linkiterator=linkmap.entrySet().iterator();
while ( linkiterator.hasNext() ){
Map.Entry entry= (Map.Entry) linkiterator.next();
System.out.println(entry.getKey()+" --> "+entry.getValue());
}

System.out.println("treemap:");
Iterator treeiterator=treemap.entrySet().iterator();
while ( treeiterator.hasNext() ){
Map.Entry entry= (Map.Entry) treeiterator.next();
System.out.println(entry.getKey()+" --> "+entry.getValue());
}
}
}

Map映射—Java实现—LinkedHashMap、HashMap、TreeMap

相关文章