您的位置:首页 > 其它

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键。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hashtable hashmap hashcode