API学习HashTable

本文详细介绍了Java中Hashtable类的基本用法,包括如何添加、获取和删除键值对,以及如何遍历Hashtable等内容。此外还讲解了Hashtable的线程安全性、初始容量和负载因子等概念。
package com.wonders.week01.collection;

import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * JDK1.7
 * HashTable
 * (1)这个类实现了一个哈希表,它将键映射到值。任何非空对象都可以作为键或值使用
 * (2)为了从哈希表中恢复和存储对象,该对象必须重写hashCode和equals方法
 * (3)有两个参数影响着hashtable:初始容量和负载因子,初始容量代表的是在哈希表中可以存储的数量,
 * 初始化容量仅仅是当hashtable被创建时的一个容量大小。
 * (4)一般来说,默认的负载因子大小是0.75,在时间和空间的消耗方面提供了一个很好的平衡,
 * (5)在查找中,更高的值会增加时间复杂度但是会降低空间的的消耗。
 * (6)线程安全的类
 * @author liyongyong
 *
 */
public class HashTableTest {

	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("aaa", 1);
		map.put("bbb", 2);
		map.put("ccc", 3);
		Hashtable<String , Integer> numbers = new Hashtable<String, Integer>();
		//在hashtable中的key中映射value,其中key和value都不可以为null
		numbers.put("one", 1);
		numbers.put("two", 2);
		numbers.put("three", 3);
		//返回hashtable中key的个数
		int size = numbers.size();
		System.out.println("numbers集合中的元素个数为: " + size);
		//判断是否在hashtable中不存在键值对的映射
		boolean flag = numbers.isEmpty();
		System.out.println("如果在Hashtable中存在键值对映射,返回true,否则返回false : " + flag);
		//返回hashtable中的键
		Enumeration<String> key = numbers.keys();
		while (key.hasMoreElements()) {
			String string = (String) key.nextElement();
			System.out.print(string + "  ");
		}
		System.out.println();
		//返回hashtable中的值
		Enumeration<Integer> value = numbers.elements();
		while (value.hasMoreElements()) {
			Integer integer = (Integer) value.nextElement();
			System.out.print( integer + " ");
		}
		System.out.println();
		//判断是否有键值对存在于hashtable中,参数是一个对象类型,
		//传入的参数应该是value而不是key
		boolean exist = numbers.contains(1);
		System.out.println("是否存在键值对 :" + exist) ;
		//如果在hashtable中有一个或者多个key都映射了这个value,则返回true
		boolean containsValue = numbers.containsValue(2);
		System.out.println("存在映射 :" + containsValue);
		//如果这个具体的对象是hashTable中的一个key,则返回true.
		boolean containsKey = numbers.containsKey("one");
		System.out.println("存在这个key : " + containsKey);
		//返回在hashtable中键所映射的value,如果这个key在hashtable中不存在,则返回null
		Integer v1 = numbers.get("one");
		System.out.println("该键所映射的值是: " + v1);
		//从hashtable中根据key移除相关的键值对,如果key在hashtable中不存在,则这个方法什么也不会做
		numbers.remove("one");
		Enumeration<Integer> v = numbers.elements();
		System.out.print("remove以后的结果:");
		while (v.hasMoreElements()) {
			Integer integer = (Integer) v.nextElement();
			System.out.print(integer + " ");
		}
		System.out.println();
		//把一个map集合中的所有键值对都添加到具体的hashtable集合中
		numbers.putAll(map);
		Enumeration<String> v2 = numbers.keys();
		System.out.print("添加map以后的所有key:");
		while (v2.hasMoreElements()) {
			String str = (String) v2.nextElement();
			System.out.print( str + " ");
		}
		Enumeration<Integer> v3 = numbers.elements();
		System.out.print("添加map以后的所有value:");
		while (v3.hasMoreElements()) {
			Integer integer = (Integer) v3.nextElement();
			System.out.print( integer + " ");
		}
		System.out.println();
		//清除hashtable中的所有key
		//numbers.clear();
		//创建一个hashtable的浅克隆,hashtable自身的所有结构层次都会被复制
		//但是key和value是不会被复制的。返回值类型是一个对象
		numbers.clone();
		//返回hashtable中的所有key,以set集合的形式返回
		Set<String> set = numbers.keySet();
		for (String string : set) {
			System.out.print(string + "   ");
		}
		System.out.println();
		//以键值对的形式返回hashtable中的键值对,等号的左边是key,等号右边是value
		Set<Entry<String, Integer>> sm = numbers.entrySet();
		for (Entry<String, Integer> entry : sm) {
			System.out.print( entry + "  ");
		}
		System.out.println();
		 Collection<Integer> res = numbers.values();
		 for(Integer result : res){
			 System.out.print(result + " ");
		 }
	}

}

这里写图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值