Java 基础学习之类集框架 七 (HashMap 、 Hashtable、TreeMap)

1. 新的子类:HashMap

1.1 Map 相关基本概念

  1. 如果想要使用 Map 接口也必须依靠其子类实列化。Map 接口中的常用子类介绍如下:
    (1) HashMap: 无序存放的,是新的操作类,key 不允许重复。
    (2) Hashtable: 无序存放的,是旧的操作类,key 不允许重复。
    (3) TreeMap: 可以排序的 Map 集合,按集合中的 key 排序, key 不允许重复。
    (4) WeakHashMap: 若引用的 Map 集合,当集合中的某些内容不再使用时清除掉无用的数据,使用 gc (Garbage Collection)进行回收。
    (5) IdentifyHashMap: key 可以重复的 Map 集合。

1.2 HashMap 相关操作实例

1. 向集合中增加和取出内容

  在 Map 接口中可以通过 put(Object key,Object value) 方法向集合中增加内容,通过 get(E key) 方法根据 key 找出对应的 value。

实列1代码:
package self.learn.map;

import java.util.HashMap;
import java.util.Map;
public class LearnMapDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> map = null;                   // 声明 Map 对象
		map = new  HashMap<String, String>();             //  key 和 value 是 String 类
		map.put("1", "Java good-aa!");                    // 增加内容
		map.put("2", "Java good-bb!");
		map.put("3", "Java good-cc!");
		String val = map.get("1");                        // 根据 key 求出对应 value 
		System.out.println("取出的内容为:"+ val);             // 输出 Map,调用 toString()						
	}
}
2. 判断指定的 key 或 value 是否存在

   如果要判断一个指定的 key 或 value 是否存在,可以使用 Map 接口中提供的 contains( Object key) 和 contains( Object value ) 两方法,前者是判断 Map 集合中是否是存在指定的 key, 后者是 Map 集合中是否存在指定的 value 。

实列2代码:
package self.learn.map;

import java.util.HashMap;
import java.util.Map;
public class LearnMapDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> map = null;                   // 声明 Map 对象
		map = new  HashMap<String, String>();             //  key 和 value 是 String 类
		map.put("1", "Java good-aa!");                    // 增加内容
		map.put("2", "Java good-bb!");
		map.put("3", "Java good-cc!");
		if(map.containsKey("1")) {                        // 查找指定的 key 是否存在
			System.out.println("搜索的 key 存在!");
		}else {
			System.out.println("搜索的 key 不存在!");
		}
		if(map.containsValue("Java good-aa!")) {          // 查找指定的 value 是否存在
			System.out.println("搜索的 value 存在!");
		}else {
			System.out.println("搜索的 value 不存在!");
		}	
	}
}
运行结果截图:

在这里插入图片描述

3. 输出全部的 key

   在 Map 中提供了一个叫做 keySet() 的方法,可以将一个 Map 中的全部 key 变为一个 Set 集合,一旦有了 Set 实列,就可以直接使用 Iterator 接口输出。但是在进行操作的时候一定要注意的是,接收的 Set 集合里指定的泛型要和 May 中 key 里指定的泛型保持一致。

实列3代码:
package self.learn.map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class LearnMapDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> map = null;                   // 声明 Map 对象
		map = new  HashMap<String, String>();             //  key 和 value 是 String 类
		map.put("1", "Java good-aa!");                    // 增加内容
		map.put("2", "Java good-bb!");
		map.put("3", "Java good-cc!");
		Set<String> keySet = map.keySet();                // 得到全部的 key
		Iterator<String> iter = keySet.iterator();        // 实列化 Iterator 对象
		System.out.print("全部的 key:");                    // 输出全部的 key
		while(iter.hasNext()) {                           // 迭代输出全部的 key
			String str = iter.next();                     // 取出集合的 key
			System.out.print(str+"、");
		}
	}
}

运行结果截图:

在这里插入图片描述

4. 输出全部的 value

   如果需要输出全部的 value, 则使用 values() 方法,但是此方法的返回类型是 Collection 类型。在进行操作的时候同样要注意泛型的类型。

实列4代码:
package self.learn.map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class LearnMapDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> map = null;                   // 声明 Map 对象
		map = new  HashMap<String, String>();             //  key 和 value 是 String 类
		map.put("1", "Java good-aa!");                    // 增加内容
		map.put("2", "Java good-bb!");
		map.put("3", "Java good-cc!");
		Collection<String> values = map.values();         // 得到全部的 value
		Iterator<String> iter = values.iterator();        // 实列化 Iterator 对象
		System.out.print("全部的 value:");                    // 输出全部的  value
		while(iter.hasNext()) {                           // 迭代输出全部的  value
			String str = iter.next();                     // 取出集合的 value
			System.out.print(str+"、");
		}
	}
}

运行结果截图:

在这里插入图片描述

2. 旧的子类:Hashtable

2.1 Map 相关基本概念

   Hashtable 也是 Map 中的一个子类,与 Vector 类的推出时间是一样的,都是属于旧的操作类,其使用也和之前没太大区别。

2.2 Hashtable 相关操作实例

实列5代码:
package self.learn.map;

import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class LearnMapDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> map = null;                   // 声明 Map 对象
		map = new  Hashtable<String, String>();           //  key 和 value 是 String 类
		map.put("1", "Java good-aa!");                    // 增加内容
		map.put("2", "Java good-bb!");
		map.put("3", "Java good-cc!");
		Set<String> keys = map.keySet();                  // 得到的全部的 key 
		Iterator<String> iter1 = keys.iterator();         // 实列化 Iterator
		System.out.print("全部的 key:");                  // 输出全部的  key
		while(iter1.hasNext()) {                          // 迭代输出全部的 key 
			String str1 = iter1.next();                   // 取出内容
			System.out.print(str1+"、");
		}
						
		Collection<String> values = map.values();         // 得到全部的 value
		Iterator<String> iter2 = values.iterator();       // 实列化 Iterator 对象
		System.out.print("\n全部的 value:");                  // 输出全部的  value
		while(iter2.hasNext()) {                          // 迭代输出全部的  value
			String str2 = iter2.next();                   // 取出集合的 value
			System.out.print(str2+"、");
		}
	}
}

运行结果截图:

在这里插入图片描述

3. HashMap 与 Hashtable 的区别

序号比较点HashMapHashtable
1推出时间JDK 1.2 之后推出的,属于新的操作类JDK 1.0 时推出的,属于旧的操作类
2性能采用异步处理方式,性能更高采用同步处理方式,性能较低
3线程安全属于非线程安全的操作类属于线程安全的操作类
4null 操作key 或 value 允许保存 nullkey 或 value 不允许保存 null,否则会出现 NullPointException 异常

从实际开发来看, HashMap 类使用较多,重点掌握。

4. 排序的子类:TreeMap

   之前两个子类在存放数据时候并没有进行排序,细心的读者可以发现在前面输出全部的 key 的时候是无序的,而 TreeMap 子类的主要功能是可以按 key 排序。

4.1 TreeMap 相关操作实例

实列6代码:
package self.learn.map;

import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class LearnMapDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> map = null;                   // 声明 Map 对象
		map = new  TreeMap<String, String>();             //  key 和 value 是 String 类
		map.put("A、mldn", "Java good-aa!");               // 增加内容
		map.put("B、jixianint", "Java good-bb!");
		map.put("C、mldnjava", "Java good-cc!");
		Set<String> keys = map.keySet();                  // 得到的全部的 key 
		Iterator<String> iter1 = keys.iterator();         // 实列化 Iterator
		//System.out.print("全部的 key:");                    // 输出全部的  key
		while(iter1.hasNext()) {                          // 迭代输出全部的 key 
			String str1 = iter1.next();                   // 取出内容
			System.out.println(str1+" ---> "+map.get(str1));  // 取出key 对应的内容
		}						
	}
}

运行结果截图:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值