public class HashMapTest {
public static void main(String[] args){
HashMap<_Student_,Integer> hm = new HashMap<_Student_,Integer>();
hm.put(new _Student_(1,"langhua"),1);
hm.put(new _Student_(1,"langhua"),1);
System.out.println(hm.size());
TreeMap<_Student_,_Student_> tm = new TreeMap<_Student_,_Student_>();
tm.put(new _Student_(3,"langhua"),new _Student_(1,"langhua"));
tm.put(new _Student_(2,"langhua"),new _Student_(2,"langhua"));
System.out.println(tm.size());
Iterator<Entry<_Student_, _Student_>> it = tm.entrySet().iterator();
while(it.hasNext()){
Entry<_Student_, _Student_> en = it.next();
System.out.println(en.getKey());
System.out.println(en.getValue());
}
// 放到TreeMap的K元素必须实现Comparable接口
// 要想放到HashMap里面的对象元素不重复,K对象必须同时重写equals,hashCode方法
// 无论是什么都是要先实现K对象的方法和接口
// Map里面有entrySet() 返回 Set<Map.Entry<K,V>>
// keySet() 返回 Set<K>键集合
// values() 返回Collection<V>值集合
// Map.Entry是个静态接口,他有getKey(),getValue()方法,返回K,V
}
}
class _Student_ implements Comparable{
int num;
String name;
public _Student_(int num,String name){
this.num = num;
this.name = name;
}
public String toString(){
return num+":"+name;
}
public boolean equals(Object obj) {
_Student_ s = (_Student_) obj;
return num==s.num && name.equals(s.name);
}
public int hashCode() {
return num*name.hashCode();
}
public int compareTo(Object o) {
_Student_ s = (_Student_) o;
int results = num > s.num ? 1 : (num ==s.num ? 0 : -1);
if(results==0){
return name.compareTo(s.name);
}
return results;
}
}
引用
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的操作。
分享到:
相关推荐
HashMap和TreeMap是Java中两种常用的Map实现,它们各自具有不同的特性和使用场景。 HashMap是基于哈希表实现的,其核心思想是通过键对象的hashCode()方法来快速定位到对应的桶(bucket),从而提高查找效率。...
### Java中HashMap, LinkedHashMap, TreeMap,HashTable的区别 在Java编程语言中,`Map`接口是集合框架中的一个重要组成部分,用于存储键值对。本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, ...
在Java编程中,Map接口是用于存储键值对的数据结构,而Java提供了多种Map的实现,包括TreeMap、HashMap和ConcurrentSkipListMap。本文主要比较了这三种Map的性能,尤其是在插入和查找操作上的效率。 1. **TreeMap**...
Java 中的 Map、HashMap、TreeMap 使用详解 Map 是 Java 集合框架中的一个接口,用于存储键值对,根据键可以获取值。Map 中的键不允许重复,但值可以重复。在 Java 中,HashMap、LinkedHashMap、TreeMap 都实现了 ...
在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。...
Java 中的 HashMap 和 TreeMap 选择指南 在 Java 中,HashMap 和 TreeMap 都是常用的 Map 实现类,但是在实际开发中,选择哪种 Map 实现类往往让人感到迷茫。下面我们将详细介绍 HashMap 和 TreeMap 的特点、优缺点...
在Java编程语言中,`HashMap`、`TreeMap`和`LinkedHashMap`都是`java.util.Map`接口的实现,它们提供了不同的数据存储和访问策略。本文将深入探讨这三种数据结构的特点、工作原理以及适用场景。 1. **HashMap** `...
HashMap, HashTable, LinkedHashMap, TreeMap 的区别 在 Java 中,Map 是一个非常重要的集合类,用于存储键值对。其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和...
【HashMap、Hashtable、TreeMap详解】 HashMap、Hashtable和TreeMap都是Java中实现Map接口的类,它们用于存储键值对数据,但各自具有不同的特点和使用场景。 HashMap是最常用的Map实现,它通过哈希表(散列表)...
HashMap是最常用的Map实现,它提供了快速的查找,但不保证元素的顺序,且允许null键和值。TreeMap则按Key的自然排序或自定义排序存储元素,适合需要排序的场景。HashTable是线程安全的,但效率相对较低,不推荐在单...
HashMap TreeMap HashMap 1.所属包 java.utrl 2.继承关系 AbstractMap,V> ,接口Serializable,Coneable Map,v> 3.构造方法 HashMap()构造一个空的,默认初始容量(16) 和默认负载系数(0.75) HashMap(int ...
8. **特性和性能**:与HashMap相比,TreeMap的插入和查找速度较慢,但由于其有序性,对于需要保持数据排序的应用来说,TreeMap是一个更好的选择。在内存使用方面,由于需要存储额外的排序信息,TreeMap通常比HashMap...
- 使用`TreeMap`:创建一个`TreeMap`对象并传入`ByValueComparator`作为构造函数参数,然后将`HashMap`的所有键值对放入`TreeMap`中。 - 使用`Collections.sort()`:创建一个包含所有键的`ArrayList`,然后调用`...
Map接口用于保存具有key-value映射关系的数据,常见的Map实现包括HashMap、TreeMap、HashTable和LinkedHashMap等。Queue是Java提供的队列实现。 本文总结了HashMap和HashTable的源码学习和面试总结,涵盖了它们的...
- 如果对HashMap进行大量的排序操作,考虑使用TreeMap,它默认按照key的自然顺序排序,也可以自定义Comparator。 **5. 结论** HashMap排序并不是HashMap本身的功能,而是通过其他手段实现的。根据实际需求,可以...
Java中HashSet和HashMap的区别 Java中HashSet和HashMap是两个常用的集合类,它们都属于Java集合框架(Java Collection Framework),但是它们有着不同的实现和应用场景。 什么是HashSet? HashSet实现了Set接口,...
在Java编程中,HashMap、HashSet、TreeMap和TreeSet是四种常见的集合类,它们各自有特定的用途和内部实现机制。这些数据结构用于存储和管理数据,其中HashMap和HashSet是基于哈希表实现的,而TreeMap和TreeSet则是...
7. **HashMap与TreeMap的区别**:HashMap是基于哈希表,而TreeMap是基于红黑树。TreeMap能保持插入顺序或自然排序,但其性能稍逊于HashMap。 8. **HashMap的遍历方式**:HashMap可以通过`keySet()`、`entrySet()`和...