Map及HashMap和TreeMap详解

HashMap是java开发中最常用的集合框架之一,HashMap 可以说是 Java 中最常用的集合类框架之一,是 Java 语言中非常典型的数据结构,我们总会在不经意间用到它,很大程度上方便了我们日常开发。实现 Map 接口的类用来存储 键(key) -值(value) 对,Map 类中存储的键值对通过键来标识, 所以键值不能重复。Map接口的实现类有HashMap和TreeMap等。

一.Map

Map
存储的数据都是key,value键值对形式的
key 可以任意数据类型 ,无序的,唯一的 -->set 结合
value 可以任意数据类型无序的 ,不唯一的 -->Collection结合
一个key只能对应一个value(value可以为集合,集合中存储多个数据)
HashMap: 线程不安全,效率高,允许 key 或 value 为 null
HashTable:线程安全,效率低,不允许 key 或 value 为 null
Properties: Hashtable 的子类,key 和 value 都是 string
方法 返回值

package com.shsxt.map05;

import java.util.HashMap;
import java.util.Map;

/*
 * Map 
 * 	存储的数据都是key,value键值对形式的
 * 	key 可以任意数据类型   无序的,唯一的   -->set结合
 *  value 可以任意数据类型  无序的  ,不唯一的 -->Collection结合
 *  一个key只能对应一个value(value可以为集合,集合中存储多个数据)
 */
public class MapDemo01 {
	public static void main(String[] args) {
		Map<String,Integer> map=new HashMap();
		map.put("李敏镐",03);  
		map.put("胡歌",01);
		map.put("谢霆锋",04);  
		map.put("宋承宪",02);
		//V get(Object key)  
		
		System.out.println(map);
		System.out.println(map.get("胡歌"));
		
		/*
		 *   boolean containsKey(Object key) 
			          如果此映射包含指定键的映射关系,则返回 true。 
			 boolean containsValue(Object value) 
		 */
		System.out.println(map.containsKey("胡歌"));
		System.out.println(map.containsValue("胡歌"));
		
		//remove(key)
		System.out.println(map.remove("宋承宪"));
		
		System.out.println(map.put("胡歌", 100));;
		System.out.println(map);
	}
}

二.HashMap

1.HashMapjian简单介绍
1).首先HashMap是一种散列表(又叫哈希表),它所存储的内容为键值对(key-value)映射。
2).HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。
3).HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有序的。
4).HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。容量 是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。在Java编程语言中,加载因子默认值为0.75。
2.Hash的构造函数
HashMap共有4个构造函数:
1).HashMap()
构造一个具有默认初始容量 (16) 和默认加载因子(0.75) HashMap。
2).HashMap(int initialCapacity)
构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
3).HashMap(int initialCapacity, float loadFactor)
构造一个带指定初始容量和加载因子的空 HashMap。
4).HashMap(Map<? extends K,? extends V> m)
构造一个映射关系与指定 Map 相同的新 HashMap。
3.HashMap的API

void clear() 
          从此映射中移除所有映射关系。 
 Object clone() 
          返回此 HashMap 实例的浅表副本:并不复制键和值本身。 
 boolean containsKey(Object key) 
          如果此映射包含对于指定键的映射关系,则返回 true。 
 boolean containsValue(Object value) 
          如果此映射将一个或多个键映射到指定值,则返回 true。 
 Set<Map.Entry<K,V>> entrySet() 
          返回此映射所包含的映射关系的 Set 视图。 
 V get(Object key) 
          返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。 
 boolean isEmpty() 
          如果此映射不包含键-值映射关系,则返回 true。 
 Set<K> keySet() 
          返回此映射中所包含的键的 Set 视图。 
 V put(K key, V value) 
          在此映射中关联指定值与指定键。 
 void putAll(Map<? extends K,? extends V> m) 
          将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射中所有键的所有映射关系。 
 V remove(Object key) 
          从此映射中移除指定键的映射关系(如果存在)。 
 int size() 
          返回此映射中的键-值映射关系数。 
 Collection<V> values() 
          返回此映射所包含的值的 Collection 视图。 

注:关于这部分内容只需记住最常用的方法,其他可在用的时候查询API。

三.TreeMap

1.TreeMap简介
TreeMap 是一个有序的key-value集合,它是通过红黑树实现的。
TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。
TreeMap 实现了NavigableMap接口,意味着它支持一系列的导航方法。比如返回有序的key集合。
TreeMap 实现了Cloneable接口,意味着它能被克隆。
TreeMap 实现了java.io.Serializable接口,意味着它支持序列化。
TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
TreeMap的基本操作 containsKey、get、put 和 remove 的时间复杂度是 log(n) 。
另外,TreeMap是非同步的。 它的iterator 方法返回的迭代器是fail-fastl的。

2.TreeMap构造方法
TreeMap()
使用键的自然顺序构造一个新的、空的树映射。
TreeMap(Comparator<? super K> comparator)
构造一个新的、空的树映射,该映射根据给定比较器进行排序。
TreeMap(Map<? extends K,? extends V> m)
构造一个与给定映射具有相同映射关系的新的树映射,该映射根据其键的自然顺序 进行排序。
TreeMap(SortedMap<K,? extends V> m)
构造一个与指定有序映射具有相同映射关系和相同排序顺序的新的树映射。

猜你喜欢

转载自blog.csdn.net/qq_35901141/article/details/90083325