HashMap、Hashtable、TreeMap、Properties

HashMap、Hashtable、TreeMap、Properties

Map接口与Collection并列存在。用于保存具有映射关系的数据:key-value

Map接口中的key和value都可以是任何引用类型的数据

Map对象所对应的类,需要重写hashCode和equals方法

常用String类作为Map的键

key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的value。

HashMap:

hashMap是Map接口使用频率最高的实现类。

允许使用null键和null值,与HashSet一样,不保证映射的顺序

hashMap判断两个key相等的标准是:两个key通过equals方法的返回true,hashCode值也相等

hashMap判断两个value相等的标准是:两个value通过equals方法返回true。

package com.xatu.集合;
 
import java.io.Externalizable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
 
import org.junit.Test;
 
public class MapTest {
	@Test
	public void testHashMap() {
		Map<Integer, String> m = new HashMap<>();
		m.put(2, "cc");
		m.put(3, "aa");
		m.put(6, "dd");
		m.put(9, "f");
		m.put(2, "cb");//键相同覆盖之前
		m.put(null, null);
		
		System.out.println("容量:"+m.size());
	String rs =	m.remove(3);//删除词条
		System.out.println(rs);
		System.out.println("查找value:"+m.containsValue("ghg"));
		System.out.println("查找key:"+m.containsKey(5));
		System.out.println("之后的"+m.size());
		
		//先获取所有的键
		Set<Integer> s = m.keySet();
		Iterator<Integer> it = s.iterator();
		while (it.hasNext()) {
			Integer key =  it.next();
			String value = m.get(key);
			System.out.println("键:"+key+"值:"+value);
			
		}
		System.out.println("-----------");
		Set<Map.Entry<Integer, String>> ent = m.entrySet();
		for (Entry<Integer, String> entry : ent) {
			System.out.println("键:"+entry.getKey()+"值:"+entry.getValue());
		}
	}
}

LinkedHashMap:

LinkedHashMap是hashMap的子类

与LinkedHashSet类似,LinkedHashMap可以维护Map的迭代顺序:迭代顺序与Key-value对的插入顺序一致

TreeMap

TreeMap存储 Key-Value 对时,需要根据 key-value 对进行排序。TreeMap 可以保证所有的 Key-Value 对处于有序状态。

TreeMap 的 Key 的排序:

自然排序:TreeMap 的所有的 Key 必须实现 Comparable 接口,而且所有的 Key 应该是同一个类的对象,否则将会抛出 ClasssCastException

定制排序:创建 TreeMap 时,传入一个 Comparator 对象,该对象负责对 TreeMap 中的所有 key 进行排序。此时不需要 Map 的 Key 实现 Comparable 接口

TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0。

若使用自定义类作为TreeMap的key,所属类需要重写equals()和hashCode()方法,且equals()方法返回true时,compareTo()方法应返回0。

Hashtable:

Hashtable是个古老的 Map 实现类,线程安全。

与HashMap不同,Hashtable 不允许使用 null 作为 key 和 value

与HashMap一样,Hashtable 也不能保证其中 Key-Value 对的顺序

Hashtable判断两个key相等、两个value相等的标准,与hashMap一致。

Properties:

Properties 类是 Hashtable 的子类,该对象用于处理属性文件

由于属性文件里的 key、value 都是字符串类型,所以 Properties 里的 key 和 value 都是字符串类型

存取数据时,建议使用setProperty(String key,String value)方法和getProperty(String key)方法

posted @ 2020-08-04 18:52  athony  阅读(110)  评论(0编辑  收藏  举报