2021-04-18 11:19  阅读(64)
文章分类:Java 基础教程 文章标签:JavaJava 教程
©  原文作者:w3cschool 原文地址:https://www.w3cschool.cn/java/java-collections-traversing.html

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);
      }
    
    }
    

上面的代码生成以下结果。

2021041811111111_1.png

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);
      }
    
    }
    

上面的代码生成以下结果。

20210418111112_2.png

导航映射

可导航映射由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);
    
      }
    
    }
    

上面的代码生成以下结果。

2021041811114_3.png

并发映射

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);
      }
    }
    

上面的代码生成以下结果。

2021041811112_4.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> Java 特殊类型映射
上一篇
Java 映射操作
下一篇
Java 集合算法