- 浏览: 387615 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (213)
- 面试题目 (9)
- 设计模式 (7)
- Core Java (28)
- 杂记 (10)
- 代码模板 (6)
- 数据库 (6)
- oracle plsql (2)
- strut2 study note (1)
- Oracle Database 10g SQL开发指南学习笔记 (7)
- Unix.Shell编程(第三版) 学习笔记 (1)
- Servlet (1)
- Hibernate (1)
- 敏捷开发 (1)
- Linux (13)
- Velocity (1)
- webx (1)
- Svn (2)
- 页面html,css (2)
- English (4)
- Astah usage (1)
- UML与设计思考 (2)
- JavaScript (3)
- 读书 (4)
- 好的网址 (1)
- 网址 (0)
- JMS (1)
- 持续集成环境 (1)
- 生活 (1)
- Spring (3)
- Tomcat Server (1)
- MySQL (2)
- 算法与数据结构 (6)
- Oracle数据库 (1)
- 分布式计算 (1)
- Maven (1)
- XML (2)
- Perl (2)
- 游戏 (1)
最新评论
-
chen_yi_ping:
请问楼主,怎么测试?String filePath = arg ...
使用多线程模拟多用户并发访问一个或多个tomcat,测试性能 -
adam_zs:
好,谢谢分享。
ArrayDeque实现Stack的功能 -
zjfgf:
int.class==Integer.class 返回fals ...
Class study -
kimmking:
xslt太难写的。
在java中调用xls格式化xml
转自http://blog.csdn.net/wl_ldy/article/details/5941770
HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。
一:HashMap与HashTable的区别
1.HashTable的方法是同步 的,在方法的前面都有synchronized来同步,HashMap未经同步,所以在多线程场合要手动同步
HashMap这个区别就像Vector和ArrayList一样。
1. 可以通过
2. Map m = Collections.synchronizedMap(new HashMap(...));
3. 对HashMap进行同步操作。
可以通过 Map m = Collections.synchronizedMap(new HashMap(...)); 对HashMap进行同步操作。
2.HashTable不允许null值(key和value都不可以) ,HashMap允许null值(key和value都可以)。
3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。
4.HashTable使用Enumeration进行遍历,HashMap使用Iterator进行遍历。
1. HashTable的遍历:
2. Hashtable ht=new Hashtable();
3. ht.put("1", "111");
4. ht.put("3","333");
5. ht.put("2", "222");
6. Enumeration en=ht.keys();
7. while(en.hasMoreElements()){
8. Object key=en.nextElement();
9. Object value=ht.get(key);
10. System.out.println("key="+key+",value="+value);
11. }
HashTable的遍历: Hashtable ht=new Hashtable(); ht.put("1", "111"); ht.put("3","333"); ht.put("2", "222"); Enumeration en=ht.keys(); while(en.hasMoreElements()){ Object key=en.nextElement(); Object value=ht.get(key); System.out.println("key="+key+",value="+value); }
HashMap的遍历参考:http://blog.csdn.net/wl_ldy/archive/2010/10/13/5939552.aspx
以上只是表面的不同,它们的实现也有很大的不同。
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) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
static int indexFor(int h, int length) {
return h & (length-1);
}
以上只是一些比较突出的区别。
二、HashMap与HashSet的关系
1、HashSet底层是采用HashMap实现的:
1. public HashSet() {
2. map = new HashMap<E,Object>();
3. }
public HashSet() { map = new HashMap<E,Object>(); }
2、
调用HashSet的add方法时,实际上是向HashMap中增加了一行(key-value对),该行的key就是向HashSet增加的那个对象,该行的value就是一个Object类型的常量。
1. private static final Object PRESENT = new Object();
2. public boolean add(E e) {
3. return map.put(e, PRESENT)==null;
4. }
5. public boolean remove(Object o) {
6. return map.remove(o)==PRESENT;
7. }
private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT)==null; } public boolean remove(Object o) { return map.remove(o)==PRESENT; }
三、Properties类的特点,是否线程安全?
java.util.Properties 继承自 java.util.Hashtable ,所以Properties是线程安全的。
Properties 类表示一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串.
HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable。可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别。
一:HashMap与HashTable的区别
1.HashTable的方法是同步 的,在方法的前面都有synchronized来同步,HashMap未经同步,所以在多线程场合要手动同步
HashMap这个区别就像Vector和ArrayList一样。
1. 可以通过
2. Map m = Collections.synchronizedMap(new HashMap(...));
3. 对HashMap进行同步操作。
可以通过 Map m = Collections.synchronizedMap(new HashMap(...)); 对HashMap进行同步操作。
2.HashTable不允许null值(key和value都不可以) ,HashMap允许null值(key和value都可以)。
3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。
4.HashTable使用Enumeration进行遍历,HashMap使用Iterator进行遍历。
1. HashTable的遍历:
2. Hashtable ht=new Hashtable();
3. ht.put("1", "111");
4. ht.put("3","333");
5. ht.put("2", "222");
6. Enumeration en=ht.keys();
7. while(en.hasMoreElements()){
8. Object key=en.nextElement();
9. Object value=ht.get(key);
10. System.out.println("key="+key+",value="+value);
11. }
HashTable的遍历: Hashtable ht=new Hashtable(); ht.put("1", "111"); ht.put("3","333"); ht.put("2", "222"); Enumeration en=ht.keys(); while(en.hasMoreElements()){ Object key=en.nextElement(); Object value=ht.get(key); System.out.println("key="+key+",value="+value); }
HashMap的遍历参考:http://blog.csdn.net/wl_ldy/archive/2010/10/13/5939552.aspx
以上只是表面的不同,它们的实现也有很大的不同。
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) {
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
static int indexFor(int h, int length) {
return h & (length-1);
}
以上只是一些比较突出的区别。
二、HashMap与HashSet的关系
1、HashSet底层是采用HashMap实现的:
1. public HashSet() {
2. map = new HashMap<E,Object>();
3. }
public HashSet() { map = new HashMap<E,Object>(); }
2、
调用HashSet的add方法时,实际上是向HashMap中增加了一行(key-value对),该行的key就是向HashSet增加的那个对象,该行的value就是一个Object类型的常量。
1. private static final Object PRESENT = new Object();
2. public boolean add(E e) {
3. return map.put(e, PRESENT)==null;
4. }
5. public boolean remove(Object o) {
6. return map.remove(o)==PRESENT;
7. }
private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT)==null; } public boolean remove(Object o) { return map.remove(o)==PRESENT; }
三、Properties类的特点,是否线程安全?
java.util.Properties 继承自 java.util.Hashtable ,所以Properties是线程安全的。
Properties 类表示一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串.
发表评论
-
Log4j常用配置
2011-08-29 22:03 1681log4j.rootLogger=INFO, normal ... -
ArrayDeque实现Stack的功能
2011-08-17 15:58 7640在J2SE6引入了ArrayDeque类 ... -
Java的clone()方法,浅复制与深复制
2011-08-15 15:06 1404要想实现克隆,需要实 ... -
LinkedList源码分析
2011-08-10 15:18 1075http://blog.csdn.net/zhouyong0/ ... -
Java nio(文件读写 实例解析)
2011-08-09 18:07 4689http://blog.csdn.net/biexf/arti ... -
深入探讨 Java 类加载器
2011-08-08 15:23 777http://www.ibm.com/developerwor ... -
Java.nio 与Java.io的比较
2011-08-05 18:00 1495http://blogs.oracle.com/slc/ent ... -
java缓冲读写
2011-08-05 15:54 1105public static void main(String[ ... -
java多线程写入同一文件
2011-08-05 15:40 10040转自 :http://www.update8.com/Prog ... -
java线程及ComcurrentHashMap
2011-08-04 13:55 991http://blog.csdn.net/dimly113/a ... -
HashMap源码分析
2011-08-04 13:51 1822public class HashMap<K,V&g ... -
JVM内存模型及垃圾收集策略解析
2011-07-18 23:16 1324http://blog.csdn.net/dimly113/a ... -
Java关键字final、static使用总结
2011-06-03 12:47 9http://java.chinaitlab.com/base ... -
Java关键字final、static使用总结
2011-06-03 12:47 8一、final 根据程序上下文环境,Java关键字fina ... -
Java关键字final、static使用总结
2011-06-03 12:46 5一、final 根据程序上下文环境,Java关键字fina ... -
Java关键字final、static使用总结
2011-06-02 16:20 0转自:http://java.chinaitlab.com/b ... -
Java关键字final、static使用总结
2011-06-02 16:20 819转自:http://java.chinaitlab.com/b ... -
Java关键字final、static使用总结
2011-06-02 16:19 2转自:http://java.chinaitlab.com/b ... -
protected访问级别详解
2011-05-12 14:42 1681首先阅读:http://download.oracle.com ... -
ddfccf
2011-05-11 09:42 0sdfds
相关推荐
### HashMap与HashTable和HashSet的区别 #### 一、概述 在Java集合框架中,`HashMap`, `HashTable` 和 `HashSet` 是三个重要的数据结构,它们分别实现了`Map`接口和`Set`接口,提供了不同的功能来满足不同的编程...
与HashSet的区别在于,HashSet是基于HashMap实现的集合类,用于存储唯一对象。HashSet中的元素没有顺序,添加元素时,HashSet会将元素转化为键放入HashMap中。因此,HashSet的插入和查找速度与HashMap相当,但由于...
Map接口用于保存具有key-value映射关系的数据,常见的Map实现包括HashMap、TreeMap、HashTable和LinkedHashMap等。Queue是Java提供的队列实现。 本文总结了HashMap和HashTable的源码学习和面试总结,涵盖了它们的...
`HashSet`则是实现了`Set`接口,它不包含重复的元素,也没有顺序,但与`HashMap`和`Hashtable`不同,它不存储键值对,而是直接存储元素。`HashSet`的底层实现也依赖于`HashMap`,每个元素在`HashSet`中被视为一个键...
### Hashtable与HashMap的区别详解 #### 一、基本概念与历史背景 在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **...
在Java编程语言中,`HashMap`、`Hashtable`和`HashSet`都是集合框架的重要组成部分,分别用于存储键值对和不重复元素。下面将详细解释它们之间的区别。 首先,`Hashtable`是`Map`接口的一个早期实现,它提供了一个...
什么是HashSet? HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以...
### Java中HashMap, LinkedHashMap, TreeMap,HashTable的区别 在Java编程语言中,`Map`接口是集合框架中的一个重要组成部分,用于存储键值对。本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, ...
4. HashMap与Hashtable的区别? 答:HashMap非线程安全,而Hashtable是线程安全的;HashMap允许null键值,Hashtable不允;HashMap迭代器在修改时不会抛出ConcurrentModificationException,而Hashtable会。 5. ...
与HashMap相比,HashTable的同步特性使得它在多线程环境下更安全,但在单线程环境下,由于同步开销,其性能较低。 5. LinkedList与ArrayList的比较 LinkedList是List接口的另一个实现,它基于双向链表实现,对于在...
- **HashMap和HashTable的区别**:列举HashMap和HashTable的主要区别。 - **HashMap和HashSet的区别**:解释HashMap和HashSet之间的区别。 - **扩容机制**:HashMap是如何进行扩容的? - **长度限制**:解释为什么...
HashMap不是线程安全的,如果需要线程安全的Map,可以使用Hashtable。 LinkedHashMap与HashMap类似,但保持了插入顺序或访问顺序。TreeMap使用红黑树,保证了键的排序。 总的来说,理解这些集合的底层实现对于优化...
HashMap和HashTable的主要区别是HashMap线程不安全,而HashTable线程安全。 HashMap允许键值为null,而HashTable不允许键值为null。HashMap继承自AbstractMap,而HashTable继承自Dictionary。 在选择HashMap还是...
之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也是说HashSet里面有一个HashMap(适配器模式)。因此本文将重点分析HashMap。 HashMap实现了Map...
- HashMap与HashSet的关系? - 如何解决哈希冲突? - 如何自定义键的哈希码生成方式? - 如何避免和处理HashMap中的循环链表? 通过深入学习和理解这些知识点,你将能够在面试中自信地应对关于HashMap的问题,提升...
HashMap和HashTable是Java中两种常用的基于哈希表的数据结构,它们的主要区别如下: 1. **父类不同**:HashMap继承自AbstractMap类,而HashTable继承自Dictionary类。AbstractMap是Map接口的一个抽象实现,提供了...
2. Hashtable:Hashtable 是 Java 集合框架中的一种哈希表实现,与 HashMap 类似,但 Hashtable 是同步的,每个方法都是 synchronized,这使得 Hashtable 比 HashMap 更加安全,但同时也带来了性能开销。 3. HashSet...
2. **ArrayList与Vector的区别,HashMap与Hashtable的区别**: - **ArrayList与Vector**: - 同步性:Vector是线程安全的,ArrayList不是。 - 扩容策略:Vector默认扩容为原大小的2倍,ArrayList为1.5倍。 - **...
7. **HashMap与Hashtable、HashSet、TreeMap的区别**: - HashMap与Hashtable:HashMap非线程安全,而Hashtable是线程安全的,但性能较低,不推荐在现代Java中使用。 - HashMap与HashSet:HashMap存储键值对,...