将无序Map准换为有序的TreeMap

HashMap和TreeMap


1.AbstractMap抽象类和SortedMap接口

AbstractMap抽象类:覆盖了equals()和hashCode()方法以确保两个相等映射返回相同的哈希码。如果两个映射大小相等、包含同样的键且每个键在这两个映射中对应的值都相同,则这两个映射相等。映射的哈希码是映射元素哈希码的总和,其中每个元素是Map.Entry接口的一个实现。因此,不论映射内部顺序如何,两个相等映射会报告相同的哈希码。

SortedMap接口:它用来保持键的有序顺序。SortedMap接口为映像的视图(子集),包括两个端点提供了访问方法。除了排序是作用于映射的键以外,处理SortedMap和处理SortedSet一样。添加到SortedMap实现类的元素必须实现Comparable接口,否则您必须给它的构造函数提供一个Comparator接口的实现。TreeMap类是它的唯一一份实现。

2.两种常规Map实现(分别继承自AbstractMap和SortedMap)

HashMap:基于哈希表实现。使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。

(1)HashMap(): 构建一个空的哈希映像

(2)HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射

(3)HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像

(4)HashMap(int initialCapacity, float loadFactor): 构建一个拥有特定容量和加载因子的空的哈希映像

TreeMap:基于红黑树实现。TreeMap没有调优选项,因为该树总处于平衡状态。

(1)TreeMap():构建一个空的映像树

(2)TreeMap(Map m): 构建一个映像树,并且添加映像m中所有元素

(3)TreeMap(Comparator c): 构建一个映像树,并且使用特定的比较器对关键字进行排序

(4)TreeMap(SortedMap s): 构建一个映像树,添加映像树s中所有映射,并且使用与有序映像s相同的比较器排序

3.两种常规Map性能

HashMap:适用于在Map中插入、删除和定位元素。

Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

4.总结:HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。

5.从Map中取值

1.声明一个map: Map map = new HashMap();
2.向map中放值,注意:map是key-value的形式存放的.如:

map.put(”sa”,”dd”);

3.从map中取值:String str = map.get(”sa”).toString();结果是:str = ”dd”;

4.遍历一个map,从中取得key 和value

JDK1.5

Map m = new HashMap();
for (Object o : map.keySet()) {
  map.get(o);
}

JDK1.4

Map map = new HashMap() ;

Iterator it = map.entrySet().iterator() ;
while (it.hasNext())
{
  Map.Entry entry = (Map.Entry) it.next() ;
  Object key = entry.getKey() ;
  Object value = entry.getValue() ;
}



但是我们有的时候是需要有序的Map这个时候,我们就必须用TreeMap,在TreeMap里有TreeMap(Map m)这个构造方法,就是给我们带来里便利,只需要将无序的Map作为参数即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java 中的 List,Set 和 Map 是集合框架中最常用的三种数据结构。它们都是用来存储和操作一组对象的数据结构,但它们之间有一些不同之处。 1. List List 是有序的集合,它可以包含重复的元素。List 可以使用下标来访问它的元素,并且允许插入、删除和修改元素。常用的 List 实现类有 ArrayList 和 LinkedList。ArrayList 是基于数组实现的,适合随机访问和修改元素。LinkedList 则是基于链表实现的,适合插入和删除元素。 2. Set Set 是不允许重复元素的集合,它没有顺序概念。Set 可以用来判断一个元素是否存在于集合中,还可以进行交、并、差等操作。常用的 Set 实现类有 HashSet 和 TreeSet。HashSet 是基于哈希表实现的,适合插入和查找元素。TreeSet 则是基于红黑树实现的,适合排序和范围查找。 3. Map Map 是一种键值对的映射表,它可以用键来访问值,键是唯一的,但值可以重复。Map 可以用来存储配置信息、数据缓存等。常用的 Map 实现类有 HashMapTreeMap。HashMap 是基于哈希表实现的,适合快速查找和修改。TreeMap 则是基于红黑树实现的,适合排序和范围查找。 总之,List、Set 和 Map 都是 Java 集合框架中非常重要的部分,每种集合类都有自己的特点和用途,开发者可以根据自己的需求选择适当的集合类。 ### 回答2: Java中的集合是一种用于存储和操作数据的对象容器。在Java中,有三种常用的集合类型:List(列表)、Set(集合)和Map(映射)。 List是有序的,可以存储重复的元素。它的特点是可以按照元素的索引进行访问,也可以根据元素的值进行查找和删除。常用的List实现类有ArrayList和LinkedList。ArrayList使用动态数组实现,适用于随机访问和遍历操作,而LinkedList使用双向链表实现,适用于频繁的插入和删除操作。 Set是无序的,不可以存储重复的元素。它的特点是元素不可重复,且没有固定的顺序。常用的Set实现类有HashSet和TreeSet。HashSet使用哈希表实现,适用于快速的插入和查找操作,而TreeSet使用红黑树实现,可以按照元素的自然顺序进行遍历。 Map是一种键值对的映射结构,存储着键值对的集合。Map不允许重复的键,但允许不同的键对应相同的值。Map的特点是可以通过键快速的查找对应的值。常用的Map实现类有HashMapTreeMap。HashMap使用哈希表实现,适用于快速的查找和插入操作,而TreeMap使用红黑树实现,可以按照键的自然顺序遍历键值对。 总结来说,List是有序的、可重复的集合;Set是无序的、不可重复的集合;Map是键值对的映射结构。根据不同的需求,选择适合的集合类型可以提高代码的效率和可读性。 ### 回答3: Java中的List、Set和Map是三种常用的集合类型,它们具有以下特点: 1. List(列表)是有序的集合,可以存储重复的元素。它可以根据元素的索引位置进行访问,支持通过索引添加、删除和修改元素。常见的List实现类有ArrayList和LinkedList。 2. Set(集)是无序的集合,不可以存储重复的元素。它使用哈希表或树结构来存储元素,具有快速查找的特点。常见的Set实现类有HashSet和TreeSet。 3. Map(映射)是一种以键值对形式存储数据的集合。每个键都是唯一的,值可以重复。通过键可以快速查找对应的值。常见的Map实现类有HashMapTreeMap。 List和Set都是继承自Collection接口,而Map是独立的集合类型。它们都提供了丰富的方法来处理集合中的元素。 List和Set都可以通过Iterator遍历元素,但是List还可以通过索引访问元素。List还可以存储重复的元素,而Set则只能存储唯一的元素。 Map通过键值对来存储和访问元素,可以使用键快速查找对应的值。通过keySet()方法可以获取所有的键,通过values()方法可以获取所有的值。 List、Set和Map都是线程不安全的,如果在多线程环境下使用,需要注意线程安全性。可以通过Collections类的synchronizedList、synchronizedSet和synchronizedMap方法将它们转为线程安全的集合。 总的来说,List适用于需要重复元素并且需要按照顺序访问的场景,Set适用于需要唯一元素的场景,Map适用于需要通过键值对进行存储和访问的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值