Java 特殊類型映射

2018-02-20 02:56 更新

Java集合教程 - Java特殊類型映射


已排序的映射

分類映射按順序保存映射條目。

它基于鍵對(duì)映射條目進(jìn)行排序從代碼中的 Comparable 接口a Comparator 對(duì)象。

如果鍵實(shí)現(xiàn) Comparable 接口并且您使用 Comparator 對(duì)象, Comparator 對(duì)象會(huì)做排序。

SortedMap 接口繼承了Map接口表示排序的映射。

Comparator comparator()
返回用于在SortedMap中進(jìn)行自定義排序的 Comparator 對(duì)象。

K firstKey()返回SortedMap中第一個(gè)條目的鍵。如果SortedMap為空,它會(huì)拋出一個(gè) NoSuchElementException 。

SortedMap headMap(K toKey)返回其條目的SortedMap的視圖將具有小于指定的toKey的鍵。視圖由原始SortedMap支持。

K lastKey()返回SortedMap中最后一個(gè)條目的鍵。如果SortedMap為空,它會(huì)拋出一個(gè)NoSuchElementException異常。

SortedMap subMap(K fromKey,K toKey)返回SortedMap的視圖其條目將具有從指定的鍵fromKey(包含)和toKey(exclusive)。

SortedMap tailMap(K fromKey)返回其條目的SortedMap的視圖將具有等于或大于指定的fromKey的密鑰。

TreeMap 類是實(shí)現(xiàn)類 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);
  }

}

上面的代碼生成以下結(jié)果。


SortedMap與Comparator

要使用 Comparator 對(duì)象對(duì) SortedMap 中的條目進(jìn)行排序,使用 TreeMap 類的構(gòu)造函數(shù)以 Comparator 作為參數(shù)。

以下代碼顯示了如何對(duì)基于排序映射的條目進(jìn)行排序在他們的鑰匙的長(zhǎng)度隨后按字母順序鍵忽略情況:

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

}

上面的代碼生成以下結(jié)果。


可導(dǎo)航映射由 NavigableMap 界面的實(shí)例表示。

它通過(guò)添加方法來(lái)擴(kuò)展 SortedMap 接口對(duì)于鍵的最接近的匹配,以相反的順序獲得映射的視圖等。

TreeMap類是NavigableMap接口的實(shí)現(xiàn)類。

以下代碼顯示如何使用 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);

  }

}

上面的代碼生成以下結(jié)果。

并發(fā)映射

ConcurrentMap 允許我們?cè)诓绘i定映射的情況下執(zhí)行并發(fā)操作。

我們可以在使用其實(shí)現(xiàn)類創(chuàng)建并發(fā)映射時(shí)選擇并發(fā)級(jí)別。

ConcurrentHashMap類是ConcurrentMap接口的實(shí)現(xiàn)類。 它們都在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);
  }
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)