HashMap, TreeMap, Hashtable的区别
2015-07-17 16:03
225 查看
前几天,学习了JAVA SE中的HashMap, TreeMap, Hashtable三个集合类,如果用一句话来分别概括他们的特点,就是:
HashMap就是一张hash表,键和值都没有排序。
TreeMap以红-黑树结构为基础,键值按顺序排列。
Hashtable是同步的(而HashMap是不同步的)。所以如果在线程安全的环境下应该多使用HashMap,而不是Hashtable,因为Hashtable对同步有额外的开销。
1. HashMap
如果HashMap的键(key)是自定义的对象,那么需要按规则定义它的equals()和hashCode()方法。
输出:
注意,我们将"小一"添加了两次,但是HashMap却接受了两次”小一“,这不合理(因为HashMap的键不应该重复),我们会搞不清楚怎么会出现两个小一,这两位学生是否是一个人。所以,Student类应该重写hashCode()方法和equals()方法,Student类应该定义如下:
重写后输出结果如下:
输出结果如上是因为HashMap不允许有两个相等的元素存在。默认情况下(也就是类没有实现hashCode()和equals()方法时),会使用Object类中的这两个方法。Object类中的hashCode()对于不同的对象会返回不同的整数,而只有两个引用指向的同样的对象时equals()才会返回true。
2. TreeMap
TreeMap的键按顺序排列。让我们先看个例子看看什么叫作“键按顺序排列”。
输出:
因为TreeMap按照键的顺序进行排列对象,所以键的对象之间需要能够比较。我们可以实现comparable接口重写compareTo()方法。
输出结果:
3. HashTable
HashTable和HashMap类几乎是相同的,不同之处在于HashMap是不同步的,并且HashMap允许接收null值和null键。
HashMap就是一张hash表,键和值都没有排序。
TreeMap以红-黑树结构为基础,键值按顺序排列。
Hashtable是同步的(而HashMap是不同步的)。所以如果在线程安全的环境下应该多使用HashMap,而不是Hashtable,因为Hashtable对同步有额外的开销。
1. HashMap
如果HashMap的键(key)是自定义的对象,那么需要按规则定义它的equals()和hashCode()方法。
输出:
注意,我们将"小一"添加了两次,但是HashMap却接受了两次”小一“,这不合理(因为HashMap的键不应该重复),我们会搞不清楚怎么会出现两个小一,这两位学生是否是一个人。所以,Student类应该重写hashCode()方法和equals()方法,Student类应该定义如下:
重写后输出结果如下:
输出结果如上是因为HashMap不允许有两个相等的元素存在。默认情况下(也就是类没有实现hashCode()和equals()方法时),会使用Object类中的这两个方法。Object类中的hashCode()对于不同的对象会返回不同的整数,而只有两个引用指向的同样的对象时equals()才会返回true。
2. TreeMap
TreeMap的键按顺序排列。让我们先看个例子看看什么叫作“键按顺序排列”。
输出:
因为TreeMap按照键的顺序进行排列对象,所以键的对象之间需要能够比较。我们可以实现comparable接口重写compareTo()方法。
输出结果:
3. HashTable
HashTable和HashMap类几乎是相同的,不同之处在于HashMap是不同步的,并且HashMap允许接收null值和null键。
相关文章推荐
- c语言实现hashmap(转载)
- C#中遍历Hashtable的4种方法
- C#将HashTable中键列表或值列表复制到一维数组的方法
- JAVASCRIPT HashTable
- java hashtable实现代码
- 解析WeakHashMap与HashMap的区别详解
- hashCode方法的使用讲解
- java中vector与hashtable操作实例分享
- 基于Java HashMap的死循环的启示详解
- Java中HashMap和Hashtable的区别浅析
- 重载toString实现JS HashMap分析
- C#将hashtable值转换到数组中的方法
- Android中实现HashMap排序的方法
- c语言实现的hashtable分享
- 利用C语言实现HashTable
- php中hashtable实现示例分享
- 深入理解Java中的HashMap的实现机制
- 全面解析java中的hashtable
- why在重写equals时还必须重写hashcode方法分享
- HashMap总结