0717-7821348
新闻中心

500万彩票网ios下载

您现在的位置: 首页 > 新闻中心 > 500万彩票网ios下载
怎么决议运用 HashMap 仍是 TreeMap?
2019-11-20 22:00:02

介绍

TreeMap的Key值是要求完成java.lang.Comparable,所以迭代的时分TreeMap默许是依照Key值升序排序的;TreeMap的完成是根据红黑树结构。适用于按天然次序或自界说次序遍历键(key)。

HashMap的Key值完成散列hashCode(),散布是散列的、均匀的,不支持排序;数据结构主要是桶(数组),链表或红黑树。适用于在Map中刺进、删去和定位元素。

定论

假如你需求得到一个有序的成果时就应该运用TreeMap(由于HashMap中元素的摆放次序是不固定的)。除此之外,由于HashMap有更好的功能,所以大多不需求排序的时分咱们会运用HashMap。

拓宽

1、HashMap 和怎么决议运用 HashMap 仍是 TreeMap? TreeMap 的完成

HashMap:根据哈希表完成。运用HashMap要求增加的键类清晰界说了hashCode()和equals()[能够重写hashCode()和equals()],为了优化HashMap空间的运用,您能够调优初始容量和负载因子。

  • HashMap(怎么决议运用 HashMap 仍是 TreeMap?): 构建一个空的哈希映像
  • HashMap(Map m): 构建一个哈希映怎么决议运用 HashMap 仍是 TreeMap?像,而且增加映像m的一切映射
  • HashMap(int initialCapacity): 构建一个具有特定容量的空的哈希映像
  • HashMap(int initialCapacity, float lo怎么决议运用 HashMap 仍是 TreeMap?adFactor): 构建一个具有特定容量和加载因子的空的哈希映像

TreeMap:根据红黑树完成。TreeMap没有调优选项,由于该树总处于平衡状况。

  • TreeMap():构建一个空的映像树
  • TreeMap(Map m): 构建一个映像树,而且增加映像m中一切元素
  • TreeMap(Comparator c): 构建一个映像树,而且运用特定的比较器对关键字进行排序
  • TreeMap(SortedMap s): 构建一个映像树,增加映像树s中一切映射,而且运用与有序映像s相同的比较器排序

2、HashMap 和 TreeMap 都对错线程安全

HashMap承继AbstractMap抽象类,TreeMap承继自SortedMap接口。

AbstractMap抽象类:覆盖了equals()和hashCode()办法以保证两个持平映射回来相同的哈希码。假如两个映射巨细持平、包含相同的键且每个键在这两个映射中对应的值都相同,则这两个映射持平。映射的哈希码是映射元素哈希码的总和,其间每个元素是Map.Entry接口的一个完成。因而,不管映射内部次序怎么,两个持平映射会陈述相同的哈希码。

SortedMap接口:它用来坚持键的有序次序。SortedMap接口为映像的视图(子集),包含两个端点供给了拜访办法。除了排序是作用于映射的键以外,处理SortedMap和处理SortedSet相同。增加到SortedMap完成类的元素有必要完成Comparable接口,不然您有必要给它的结构函数供给一个Comparator接口的完成。TreeMap类是它的仅有一个完成。

3、TreeMap中默许是依照升序进行排序的,怎么让他降序

经过自界说的比较器来完成

界说一个比较器类,完成Comparator接口,重写compare办法,有两个参数,这两个参数经过调用compareTo进行比较,而compareTo默许规则是:

  • 假如参数字符串等于此字符串,则回来 0 值;
  • 假如此字符串小于字符串参数,则回来一个小于 0 的值;
  • 假如此字符串大于字符串参数,则回来一个大于 0 的值。

自界说比较器时,在回来时多增加了个负号,就将比较的成果以相反的方式回来,代码如下:

static class MyComparator implements Comparator{
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
String param1 = (String)o1;
String param2 = (String)o2;
return -param1.compareTo(param2);
}
}

之后,经过MyComparator类初始化一个比较器实例,将其作为参数传进TreeMap的结构办法中:

MyComparator comparator = new MyComparator();
Map map = new TreeMap(comparator);

这样,咱们就能够运用自界说的比较器完成降序了

public class MapTest {
public static void main(String[] args) {
//初始化自界说比较器
MyComparator comparator = new MyComparator();
//初始化一个map调集
Map map = new TreeMap(comparator);
//存入数据
map.put("a", "a");
map.put("b", "b");
map.put("f", "f");
map.put("d", "d");
map.put("c", "c");
map.put("g", "g");
//遍历输出
Iterator iterator = map.keySet().iterator();
while(iterator.hasNext()){
String key = (String)iterator.next();
System.out.println(map.get(key));
}
}
sta泗阳tic class MyComparator implements Com怎么决议运用 HashMap 仍是 TreeMap?parator{
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
String param1 = (String)o1;
String param2 = (String)o2;
return -param1.compareTo(param2);
}
}
}