java特殊类_Java 特殊类型映射

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 sMap = new TreeMap<>();

sMap.put("CSS", "style");

sMap.put("HTML", "mark up");

sMap.put("Oracle", "database");

sMap.put("XML", "data");

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

}

}

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

74297d82e33ceba2cb7d2004810f4a1c.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 keyComparator =

Comparator.comparing(String::length).thenComparing(String::compareToIgnoreCase);

SortedMap sMap = new TreeMap<>(keyComparator);

sMap.put("CSS", "style");

sMap.put("HTML", "mark up");

sMap.put("Oracle", "database");

sMap.put("XML", "data");

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

}

}

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

bcf8ea2e5c53c7bc8e72e2ace821db56.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 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 lowerXML = nMap.lowerEntry("XML");

Entry floorXML = nMap.floorEntry("XML");

Entry higherXML = nMap.higherEntry("XML");

Entry 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 reverseMap = nMap.descendingMap();

System.out.println("Navigable Map(Reverse Order):" + reverseMap);

}

}

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

6109c7ea762bb5918ae2952c6ba5856f.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 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);

}

}

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

872ba104de03ed60185fc915fcc30c1b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值