- 浏览: 728178 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (442)
- 中间件 (20)
- hibernate (13)
- spring (20)
- 数据库 (78)
- struts (8)
- ibatis (4)
- 前端 (61)
- linux,windows (21)
- it大环境 (32)
- IDE工具 (36)
- 感悟 (6)
- java基础 (40)
- 经典面试题 (10)
- exception总结 (14)
- 软件设计 (8)
- 工具类应用及新技术 (48)
- php (2)
- 微信 (1)
- 设计模式 (2)
- 重构 (3)
- 管理 (2)
- 工作笔记 (1)
- jmx (1)
- 算法 (4)
- 多线程同步 (2)
- 代码管理工具 (5)
- 代码检测及测试 (2)
- 缓存服务 (1)
- SOA及ROA (5)
- groovy (1)
- 网络编程 (2)
- 大数据 (6)
最新评论
-
love398146779:
我当然不能全写上面了,这只是其中一部分https连接。
java 建立 https连接 -
yuenkin:
大哥,这是双向认证吗?
java 建立 https连接 -
issu:
例如以下代码能遍历字符串"Tom:M ...
<c:forTokens>标签delims截取字符 -
love398146779:
2*3*5=30,是30个以上的请求才拒绝呀。
tomcat的maxThreads、acceptCount(最大线程数、最大排队数) -
love398146779:
2台跟1台一样的效果。
zookeeper与activemq最新存储replicatedLevelDB整合
HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。
1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。
2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
4.HashTable使用Enumeration,HashMap使用Iterator。
以上只是表面的不同,它们的实现也有很大的不同。
5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);
static int hash(Object x) {
int h = x.hashCode();
h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}
static int indexFor(int h, int length) {
return h & (length-1);
}
以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如
HashMap对null的操作。
-----------------------
or (Iterator it = dHashTable.keySet().iterator(); it.hasNext(); ) {
String key = (String) it.next();
Object value = dHashTable.get(key);
}
-------------------------
Enumeration e=hashtable.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
Enumeration e=hashtable.keys();
while(e.hasMoreElements()){
System.out.println(hash.get(e.nextElement()));
}
-------------------------------
for (Iterator it = dHashTable.keySet().iterator(); it.hasNext(); ) {
String key = (String) it.next();
Object value = dHashTable.get(key);
}
---------------------
package com.zcjl.test;
import java.util.Hashtable;
import java.util.Iterator;
public class TestHashtable {
public static void main(String[] args) {
Hashtable table = new Hashtable();
table.put("1", "AAA");
table.put("2", "BBB");
table.put("3", "CCC");
table.put("4", "DDD");
table.put("5", "EEE");
for (Iterator it2 = table.keySet().iterator(); it2.hasNext();) {
String key = (String) it2.next();
System.out.println(key + table.get(key));
}
}
}
结果为
5EEE
4DDD
3CCC
2BBB
1AAA
package com.zcjl.test;
import java.util.HashMap;
import java.util.Iterator;
public class TestHashMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("1", "AAA");
hashMap.put("2", "BBB");
hashMap.put("3", "CCC");
hashMap.put("4", "DDD");
hashMap.put("5", "EEE");
for (Iterator it = hashMap.keySet().iterator(); it.hasNext();) {
String key = (String) it.next();
System.out.println(key + hashMap.get(key));
}
}
}
结果为:
3CCC
5EEE
2BBB
4DDD
1AAA
从结果看,也许Hashtable能保证按加入的顺序遍历?
这个测试太简单,所以我不敢保证结论
1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。
2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
4.HashTable使用Enumeration,HashMap使用Iterator。
以上只是表面的不同,它们的实现也有很大的不同。
5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);
static int hash(Object x) {
int h = x.hashCode();
h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}
static int indexFor(int h, int length) {
return h & (length-1);
}
以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如
HashMap对null的操作。
-----------------------
or (Iterator it = dHashTable.keySet().iterator(); it.hasNext(); ) {
String key = (String) it.next();
Object value = dHashTable.get(key);
}
-------------------------
Enumeration e=hashtable.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
Enumeration e=hashtable.keys();
while(e.hasMoreElements()){
System.out.println(hash.get(e.nextElement()));
}
-------------------------------
for (Iterator it = dHashTable.keySet().iterator(); it.hasNext(); ) {
String key = (String) it.next();
Object value = dHashTable.get(key);
}
---------------------
package com.zcjl.test;
import java.util.Hashtable;
import java.util.Iterator;
public class TestHashtable {
public static void main(String[] args) {
Hashtable table = new Hashtable();
table.put("1", "AAA");
table.put("2", "BBB");
table.put("3", "CCC");
table.put("4", "DDD");
table.put("5", "EEE");
for (Iterator it2 = table.keySet().iterator(); it2.hasNext();) {
String key = (String) it2.next();
System.out.println(key + table.get(key));
}
}
}
结果为
5EEE
4DDD
3CCC
2BBB
1AAA
package com.zcjl.test;
import java.util.HashMap;
import java.util.Iterator;
public class TestHashMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("1", "AAA");
hashMap.put("2", "BBB");
hashMap.put("3", "CCC");
hashMap.put("4", "DDD");
hashMap.put("5", "EEE");
for (Iterator it = hashMap.keySet().iterator(); it.hasNext();) {
String key = (String) it.next();
System.out.println(key + hashMap.get(key));
}
}
}
结果为:
3CCC
5EEE
2BBB
4DDD
1AAA
从结果看,也许Hashtable能保证按加入的顺序遍历?
这个测试太简单,所以我不敢保证结论
发表评论
-
eclipse 下找不到或无法加载主类的解决办法
2016-07-25 15:31 853有时候 Eclipse 会发神经,好端端的 project 就 ... -
maven项目,找不到resource下边的文件
2016-07-14 09:49 1447备忘: maven项目,找不到resource下边的文件,在p ... -
不同map对象的list排序
2015-05-21 13:57 517//对频道进行排序 class ComparatorChan ... -
http协议中:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法
2014-10-20 10:53 1699HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表 ... -
一致性哈希算法原理 .
2014-08-01 19:53 563http://baike.baidu.com/view/158 ... -
Http Get Post put delete
2014-07-31 19:54 635HTTP POST GET 本质区别详解 一 原理区别 ... -
汉字占位
2014-07-16 15:21 1312GBK编码,一个汉字占两个字节。 UTF-16编码,通常汉 ... -
Java中的换行符line.separator及file的separator
2014-07-16 15:17 1551在不同的平台上,换行符可能是不同的,例如: Mac平台:\r ... -
addShutdownHook的用处
2014-07-16 11:16 432Runtime.getRuntime().addShutdow ... -
java对注解的反射
2013-09-04 20:12 820import java.lang.annotation.Ret ... -
有关http Keep-Alive 的详细解释
2013-05-10 08:46 1299Keep-Alive通俗地讲,就是所谓的持久连接,对于http ... -
浅复制和深度复制 clone()Thinking in java
2013-04-12 16:24 890Java语言的一个优点就是取消了指针的概念,但也导致了许多程序 ... -
emf格式图片,费了3天时间
2012-11-13 16:43 1975public static byte[] createEmfT ... -
java对list的泛型,非严格检查
2012-10-15 14:45 919public class Student { String ... -
长连接
2012-09-17 19:50 1021前提qq登录然后断网。 为什么能一连上互联网,就自动登录。 答 ... -
buffer缓冲区
2012-08-30 17:18 2080当用到二进制传输的时候,一定会用bytebuffer这个类,它 ... -
各种uuid的截取
2012-08-09 13:52 2838import java.util.ArrayList; ... -
string撑爆内存
2012-07-19 15:45 0String hello="Hello&quo ... -
用个中间变量转换,不错的思想
2012-07-06 10:13 819public void setRecks(List trade ... -
java内醒
2012-06-29 14:26 1014经过多方面的资料搜集整理,写下了这篇文章,本文主要讲解java ...
相关推荐
HashMap之resize()方法源码解读 HashMap的resize()方法是HashMap中最核心的方法之一,该方法负责扩容HashMap的容量,以便存储更多的键值对。下面我们将对HashMap的resize()方法进行源码解读,了解其扩容机制和原理...
《HashMap面试题详解》 HashMap作为Java集合框架中的重要成员,是面试中常见的知识点,尤其在数据结构与算法、并发编程以及JVM内存管理等领域,HashMap的深入理解至关重要。本篇将围绕HashMap的相关面试题,从基础...
### hashMap和hashTable的区别 #### 一、简介与基本概念 `HashMap` 和 `HashTable` 都是 Java 集合框架中非常重要的数据结构,它们都实现了 `Map` 接口,用于存储键值对。尽管它们在功能上有很多相似之处,但在...
在Java编程中,HashMap是一个非常常用的集合类,用于存储键值对数据。然而,它存在一个重要的特性,那就是线程不安全。理解这个问题并找到解决方案是每个Java开发者必须掌握的知识。 HashMap线程不安全的原因主要...
### HashMap与HashTable的区别详解 #### 引言 在Java编程中,`HashMap`与`HashTable`作为两种常用的数据结构,经常被用来存储键值对数据。尽管它们在功能上相似,但在实现细节、性能表现以及使用场景方面存在显著...
### HashMap介绍和使用详解 #### 一、HashMap的数据结构 HashMap是Java集合框架的一个重要组成部分,它实现了Map接口,能够存储键值对映射。在Java编程语言中,最基本的数据结构有两种:数组和引用(模拟指针)。...
在这个主题中,我们将深入探讨如何使用JNI处理HashMap、String等对象。 首先,让我们来理解JNI的基本结构。JNI接口提供了大量的函数,让本地方法(C/C++代码)能够创建、访问和修改Java对象。要使用JNI,你需要定义...
### 使用HashMap模拟网上购物车 #### 一、项目背景与目标 在本实验中,我们通过使用Java语言中的`HashMap`来模拟一个简单的网上购物车系统。该项目的主要目的是熟悉Java集合框架中的`HashMap`类,并了解如何利用它...
HashMap是Java编程语言中一个非常重要的数据结构,它属于集合框架的一部分,主要用于存储键值对(Key-Value)数据。HashMap在内部实现上基于哈希表,也称为散列表,它提供了一种快速查找、插入和删除数据的方法,...
### ibatis 使用 HashMap 解决 resultClass 映射 在日常的软件开发过程中,尤其是在处理数据库查询时,我们经常面临一个问题:如何优雅地处理那些未知或动态变化的列名及列数的情况?在这种情况下,传统的实体类...
在IT行业中,哈希表(HashMap)是一种高效的数据结构,它使用哈希函数将键(Key)映射到数组的特定位置,以便快速存取数据。Delphi是一种强大的Object Pascal编程语言,它提供了多种实现哈希表的方式。在这个特定的...
Java HashMap 类详解 本资源详细介绍了 Java 中的 HashMap 类,包括其实现机制、Hash 存储机制、集合存储机制等方面的知识点。 1. HashMap 和 HashSet 的关系 HashMap 和 HashSet 是 Java Collection Framework ...
Java中的HashMap是一个非常重要的数据结构,它实现了Map接口,提供了键值对的高效存储和访问。HashMap基于哈希表(也称为散列表)原理工作,它允许用户通过键(Key)快速查找对应的值(Value)。在HashMap中,键和值...
哈希映射(HashMap)是Java编程语言中广泛使用的数据结构之一,主要提供键值对的存储和查找功能。HashMap的实现基于哈希表的概念,它通过计算对象的哈希码来快速定位数据,从而实现了O(1)的平均时间复杂度。在深入...
HashMap类在Java编程语言中是集合框架的一部分,它是一个基于哈希表的Map接口实现。HashMap提供了快速的插入、删除和查找操作,平均时间复杂度为O(1)。在这个压缩包“HashMap类.rar”中,包含的是易语言版本的...
### Java中HashMap, LinkedHashMap, TreeMap,HashTable的区别 在Java编程语言中,`Map`接口是集合框架中的一个重要组成部分,用于存储键值对。本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, ...
HashMap是Java编程语言中常用的集合类之一,它属于哈希表数据结构,提供key-value的存储方式,并且具有快速查询的特性。然而,HashMap本身并不保证元素的顺序,特别是当涉及到遍历或输出HashMap的内容时,顺序可能会...
哈希映射(HashMap)是Java编程语言中一个非常重要的数据结构,它在《简单的key value hashmap》中被提及,通常用于存储键值对(key-value pairs)。HashMap是Java集合框架的一部分,它提供了高效的查找、插入和删除...
《马士兵老师HashMap学习笔记详解》 HashMap是Java编程语言中常用的一种数据结构,它提供了键值对(key-value pair)的存储功能,是基于哈希表实现的。马士兵老师的HashMap学习笔记深入剖析了这一核心组件的工作...