hashmap和treemap

来源:互联网 发布:zayn malik知乎 编辑:程序博客网 时间:2024/04/28 10:10

hashmap比较熟悉了,在这里有讲解。

treemap是基于红黑树实现的。【在阿里巴巴面试的时候就被问过了红黑树,结果到现在还是不会。。总结一下,在这里】
下面着重介绍一下treemap。
treemap没有调优选项,因为该树总处于平衡状态。
treemap:适用于按自然顺序或自定义顺序遍历键(key)。
treemap的构造方法有一个是需要传入一个comparator的,如下:
new TreeMap<String, String>(comparator)
如果使用了这个构造函数,那么构造出来的map则是根据传入的comparator来进行排序的。否则treemap根据自然顺序进行排序。
----------------------------------------
AbstractMap抽象类和SortedMap接口
AbstractMap抽象类:覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。如果两个映射大小相等、包含同样的键且每个键在这两个映射中对应的值都相同,则这两个映射相等。映射的哈希码是映射元素哈希码的总和,其中每个元素是Map.Entry接口的一个实现。因此,不论映射内部顺序如何,两个相等映射会报告相同的哈希码。
SortedMap接口:它用来保持键的有序顺序。SortedMap接口为映像的视图(子集),包括两个端点提供了访问方法。除了排序是作用于映射的键以外,处理SortedMap和处理SortedSet一样。添加到SortedMap实现类的元素必须实现Comparable接口,否则您必须给它的构造函数提供一个Comparator接口的实现。

---------------------------------------------------------

看jdk上的描述:

注意,此实现不是同步的。如果多个线程同时访问一个映射,并且其中至少一个线程从结构上修改了该映射,则其必须 外部同步。(结构上的修改是指添加或删除一个或多个映射关系的操作;仅改变与现有键关联的值不是结构上的修改。)这一般是通过对自然封装该映射的对象执行同步操作来完成的。如果不存在这样的对象,则应该使用 Collections.synchronizedSortedMap方法来“包装”该映射。最好在创建时完成这一操作,以防止对映射进行意外的不同步访问,如下所示:

   SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));


 

原创粉丝点击