热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java基础知识HashMap和HashTable的区别

Java基础知识HashMap和HashTable的区别HashMap和HashTable区别:名称HashMap键和值都可以为null含有containsValue



Java 基础知识 HashMap 和HashTable 的区别



HashMap和HashTable 区别:


名称          
HashMap 键和值都可以为null 含有containsValue,和containsKey方法 HashMap是非synchronized HashMap 是Java1.2 引进的Map interface 的一个实现 速度较hashtable快
HashTable 键和值不可以为null 含有containsValue,和containsKey方法 HashTable是synchronized Hashtable 继承于Dictionary 类 速度较慢

1) sychronized意味着在一次仅有一个线程能够更改Hashtable。就是说任何线程要更新Hashtable时要首先获得同步锁,其它线程要等到同步锁被释放之后才能再次获得同步锁更新Hashtable。

2)hashMap如何同步:

HashMap可以通过下面的语句进行同步:
Map m = Collections.synchronizeMap(hashMap);

3)HashMap和HashTable

Hashtable和HashMap有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable,而如果你使用Java 5或以上的话,请使用ConcurrentHashMap吧。

package com.java.test;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;

public class HashMapHashTableTest {

/**
* @param args
*/
public static void main(String[] args) {
/**
* Map 是一个键值对 键可以不重复,但是值需要重复
*/
//System.out.println("Test HashMap");
//HashMapHashTableTest.testHashMap();
System.out.println("Test HashTable");
HashMapHashTableTest.testHashTale();
}

public static void init(Map map){
/**
* Map 的键是不可重复的,如果插入两个键值相同的记录,
* 后插入的记录会覆盖先插入的记录
*/
if(map != null){
String key = null;
for(int i = 5; i>0; i--){
key = new Integer(i).toString() +".0";
map.put(key, key.toString());
map.put(key, key.toString()+"0");
}
}
}

public static void output(Map map){
if(map != null){
Object key = null;
Object value = null;
// 使用迭代器遍历 Map键, 根据键进行取值
Iterator it = map.keySet().iterator();
//while(Object key: map.keySet()){
//
//}
while(it.hasNext()){
key = it.next();
value = map.get(key);
System.out.println("Key:"+key+" Value:"+value);
}

System.out.println("Map.Entry output key value:");
/**
* 还有一种方式遍历 Map keySet 是一种方式, Map.entry是一种方式entrySet()
* 不可贪多, 贪多嚼不烂
*/
Map.Entry entry = null;
it = map.entrySet().iterator(); //entry set 之后的迭代器
while(it.hasNext()){
entry = (Map.Entry) it.next();
System.out.println("Key: "+entry.getKey()+" Value: "+entry.getValue());
}

}
}

public static void testHashMap(){
Map hashMap = new HashMap();
//hashMap.containsKey(key)
//hashMap.containsValue(value)
init(hashMap);
//HashMap 的键值对可以为Null
hashMap.put(null, "ddd");
// HashMap的值可以为null
hashMap.put("aaa", null);
output(hashMap);
}

public static void testHashTale(){
Map hashTable = new Hashtable();
init(hashTable);
//hashTable.containsKey(key)
//hashTable.containsValue(value)
//HashTale 的键值不能为 Null
//hashTable.put(null, "ddd");
//HashTable 的值不可以为 Null
//hashTable.put("aaa", null);
output(hashTable);
}

}





推荐阅读
  • HashTable与ConcurrentHashMap均可实现HashMap的功能,对外提供了键值对存储的数据结构。但是在内部结构及实现上有何区别,性能上的差异到底在哪里又是如何导致的 ... [详细]
  • hashmap线程不安全允许有null的键和值效率高一点、方法不是Synchronize的要提供外同步有containsvalue和containsKey方法HashMap是Java1 ... [详细]
  • 一、HashMap1.HashMap概述:HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是 ... [详细]
  • 类Hashtable<K,V>所有已实现的接口:Serializable,Cloneable,Map<K,V>此类实现一个哈希表,该哈希表将键映 ... [详细]
  • 本篇文章给大家分享的是有关Java中怎么对HashMap按键值排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话 ... [详细]
  • 将学生对象和学生的归属地通过键与值存储到map集合中。importjava.util.HashMap;importjava.util.Iterator;importjava.uti ... [详细]
  • 01Map集合概述A:Map集合概述:我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同a:Collection中的集合 ... [详细]
  • 在Java中有多种遍历HashMap的方法,注意Java中所有的Map类型都实现了共有的Map接口,所以接下来方法适用于所有Map(如:HaspMap,TreeMap,Linked ... [详细]
  • Java面试 HashMap、HashSet源码解析
    本章所有源代码基于JDK1.8版本HashMap和HashSet是JavaCollectionFramework的两个重要成员,其中HashMap是Map接口的常用实现类,Hash ... [详细]
  • 写这篇文章起源于一道面试题,如何将自定义的类对象作为key存储到HashMap中,即考虑怎么判断key的唯一性。首先,我们看以下HashMap中put(…)方法的源码:public ... [详细]
  • 这篇“HashMap实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅 ... [详细]
  • 背景知识哈希冲突哈希是指通过某种方法把数据转变成特定的数值,数值根据mod对应到不同的单元上。比如在Java中,字符串就是通过每个字符的编码来计算、数字是本身对应的值等等,不过就算是再好的哈希方法,也 ... [详细]
  • HashMap JDK1.8原理分析
    HashMap、Hashtable、LinkedHashMap和TreeMap下面针对各个实现类的特点做一些说明:(1)HashMap:它根据键的hashCode值存储数据,大多数 ... [详细]
  • 问题描述  给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。输入格式  输入的第一行包含一个整数n,表示给定数字的个数。  第二行包含n个整数,相邻的整 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
author-avatar
Wei-Micro_788
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有