Java集合教程 - Java特殊类型映射
已排序的映射
分类映射按顺序保存映射条目。
它基于键对映射条目进行排序从代码中的 Comparable
接口a Comparator
对象。
如果键实现 Comparable
接口并且您使用 Comparator
对象, Comparator
对象会做排序。
SortedMap
接口继承了Map接口表示排序的映射。
Comparator comparator()
返回用于在SortedMap中进行自定义排序的 Comparator
对象。
K firstKey()
返回SortedMap中第一个条目的键。如果SortedMap为空,它会抛出一个 NoSuchElementException
。
SortedMap headMap(K toKey)
返回其条目的SortedMap的视图将具有小于指定的toKey的键。视图由原始SortedMap支持。
K lastKey()
返回SortedMap中最后一个条目的键。如果SortedMap为空,它会抛出一个NoSuchElementException异常。
SortedMap subMap(K fromKey,K toKey)
返回SortedMap的视图其条目将具有从指定的键fromKey(包含)和toKey(exclusive)。
SortedMap tailMap(K fromKey)
返回其条目的SortedMap的视图将具有等于或大于指定的fromKey的密钥。
TreeMap
类是实现类 SortedMap
界面。下面的代码演示了如何使用 SortedMap
。
import java.util.SortedMap; import java.util.TreeMap; public class Main { public static void main(String[] args) { SortedMap<String, String> sMap = new TreeMap<>(); sMap.put("CSS", "style"); sMap.put("HTML", "mark up"); sMap.put("Oracle", "database"); sMap.put("XML", "data"); SortedMap<String, String> subMap = sMap.subMap("CSS", "XML"); System.out.println(subMap); // Get the first and last keys String firstKey = sMap.firstKey(); String lastKey = sMap.lastKey(); System.out.println("First Key: " + firstKey); System.out.println("Last key: " + lastKey); } }
上面的代码生成以下结果。
SortedMap与Comparator
要使用 Comparator
对象对 SortedMap
中的条目进行排序,使用 TreeMap
类的构造函数以 Comparator
作为参数。
以下代码显示了如何对基于排序映射的条目进行排序在他们的钥匙的长度随后按字母顺序键忽略情况:
import java.util.Comparator; import java.util.SortedMap; import java.util.TreeMap; public class Main { public static void main(String[] args) { Comparator<String> keyComparator = Comparator.comparing(String::length).thenComparing(String::compareToIgnoreCase); SortedMap<String, String> sMap = new TreeMap<>(keyComparator); sMap.put("CSS", "style"); sMap.put("HTML", "mark up"); sMap.put("Oracle", "database"); sMap.put("XML", "data"); SortedMap<String, String> subMap = sMap.subMap("CSS", "XML"); System.out.println(subMap); // Get the first and last keys String firstKey = sMap.firstKey(); String lastKey = sMap.lastKey(); System.out.println("First Key: " + firstKey); System.out.println("Last key: " + lastKey); } }
上面的代码生成以下结果。
导航映射
可导航映射由 NavigableMap
界面的实例表示。
它通过添加方法来扩展 SortedMap
接口对于键的最接近的匹配,以相反的顺序获得映射的视图等。
TreeMap类是NavigableMap接口的实现类。
以下代码显示如何使用 NavigableMap
。
import java.util.Map.Entry; import java.util.NavigableMap; import java.util.TreeMap; public class Main { public static void main(String[] args) { NavigableMap<String, String> nMap = new TreeMap<>(); nMap.put("CSS", "style"); nMap.put("HTML", "mark up"); nMap.put("Oracle", "database"); nMap.put("XML", "data"); System.out.println("Navigable Map:" + nMap); Entry<String, String> lowerXML = nMap.lowerEntry("XML"); Entry<String, String> floorXML = nMap.floorEntry("XML"); Entry<String, String> higherXML = nMap.higherEntry("XML"); Entry<String, String> ceilingXML = nMap.ceilingEntry("XML"); System.out.println("Lower:" + lowerXML); System.out.println("Floor:" + floorXML); System.out.println("Higher:" + higherXML); System.out.println("Ceiling:" + ceilingXML); // Get the reverse order view of the map NavigableMap<String, String> reverseMap = nMap.descendingMap(); System.out.println("Navigable Map(Reverse Order):" + reverseMap); } }
上面的代码生成以下结果。
并发映射
ConcurrentMap
允许我们在不锁定映射的情况下执行并发操作。
我们可以在使用其实现类创建并发映射时选择并发级别。
ConcurrentHashMap类是ConcurrentMap接口的实现类。 它们都在java.util.concurrent包中。
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class Main { public static void main(String[] args) { ConcurrentMap<String, String> cMap = new ConcurrentHashMap<>(); cMap.put("A", "A"); System.out.println("Concurrent Map: " + cMap); System.out.println(cMap.putIfAbsent("A", "1")); System.out.println(cMap.putIfAbsent("B", "B")); System.out.println(cMap.remove("A", "B")); System.out.println(cMap.replace("A", "B")); System.out.println("Concurrent Map: " + cMap); } }
上面的代码生成以下结果。