标签:遍历 比较大小 ima 技术 shm eem 关系 compare sortedmap
本文主要介绍TreeMap、HashMap、LinkedHashMap和ConcurrentHashMap。他们之间的大致关系如下图所示:
这四种Map各自的特点如下:
Map中键必须是唯一的,值可以重复,如果键值与或者是根据自定义的“比较类”在逻辑上是相同大小,则会覆盖前一个值
SortedMap是基于红黑树的实现,如右图所示,TreeMap使其唯一的实现类,使用SortedMap可以确保键处于排序的状态,其特性如下:
Comparator
类作为构造器参数,重载其compare(obj1,obj2)方法自定义排序方式;T firstKey()和 T lastKey()
返回当前有序的Map第一个和最后一个键;SortedMap subMap(fromKey,toKey);SortedMap headMap(toKey); SortedMap tailMap(fromKey)
生成Map的子集/子树,分别指定了起始key值、指定起始值、指定结束值;重申:如果键值与或者是根据自定义的“比较类”在逻辑上是相同大小,则会覆盖前一个值
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<Integer,String> linkedMap=new TreeMap<>(
new Comparator<Integer>() {//与key类型对齐
@Override//根据参数o1与参数o2比较大小返回正、0、负,小的在前边;
public int compare(Integer o1, Integer o2) {
return Math.abs(o1-2)-Math.abs(o2-2);
}
}
);
linkedMap.put(1,"du");
linkedMap.put(2,"gen");
linkedMap.put(3,"kui");//因为根据自定义的比较类,3和1在逻辑上是大小的(距离2),因此会覆盖(1,“du");
linkedMap.put(1,"gen");
System.out.println(linkedMap);//输出顺序为从小到大
}
}
LinkedHashMap有如下特点:
示例代码如下:
public class LinkedHashMapDemo {
public static void main(String[] args) {
//沟槽参数分别是初始化容量、装载因子和是否开启LRU
LinkedHashMap<Integer,String> linkedMap=new LinkedHashMap<>(10,0.75f,true);
linkedMap.put(1,"du");
linkedMap.put(2,"gen");
linkedMap.put(3,"kui");
System.out.println(linkedMap);//以装载方式打印
linkedMap.get(2);
System.out.println(linkedMap);//可以看到被访问的元素靠后打印了
}
}
标签:遍历 比较大小 ima 技术 shm eem 关系 compare sortedmap
原文地址:https://www.cnblogs.com/dugk/p/java.html