Java SortedMap接口及实例

Java SortedMap接口及实例

SortedMap是集合框架中的一个接口。这个接口扩展了Map接口,并提供了其元素的总排序(元素可以按照键的排序顺序进行遍历)。实现这个接口的类是TreeMap。

Java中的SortedMap接口及实例

SortedMap的主要特点是它按键的自然排序,或按指定的比较器排序。因此,当你想要一个满足以下条件的地图时,可以考虑使用TreeMap。

  • 不允许出现空键或空值。
  • 键是按自然排序或按指定的比较器排序的。

类型参数

  • K – 这个地图所维护的键的类型
  • V – 映射的值的类型

SortedMap的父接口是Map<K, V>。

SortedMap的子接口是ConcurrentNavigableMap<K, V>, NavigableMap<K, V>。

SortedMap是由ConcurrentSkipListMap, TreeMap实现的。

声明

public interface SortedMap<K, V> extends Map<K, V>
{
    Comparator comparator();
    SortedMap subMap(K fromKey, K toKey);
    SortedMap headMap(K toKey);
    SortedMap tailMap(K fromKey);
    K firstKey();
    K lastKey();
}

例子

// Java code to demonstrate SortedMap Interface
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
  
public class SortedMapExample {
    public static void main(String[] args)
    {
        SortedMap<Integer, String> sm
            = new TreeMap<Integer, String>();
        sm.put(new Integer(2), "practice");
        sm.put(new Integer(3), "quiz");
        sm.put(new Integer(5), "code");
        sm.put(new Integer(4), "contribute");
        sm.put(new Integer(1), "geeksforgeeks");
        Set s = sm.entrySet();
  
        // Using iterator in SortedMap
        Iterator i = s.iterator();
  
        // Traversing map. Note that the traversal
        // produced sorted (by keys) output .
        while (i.hasNext()) {
            Map.Entry m = (Map.Entry)i.next();
  
            int key = (Integer)m.getKey();
            String value = (String)m.getValue();
  
            System.out.println("Key : " + key
                               + "  value : " + value);
        }
    }
}

输出:

Key : 1  value : geeksforgeeks
Key : 2  value : practice
Key : 3  value : quiz
Key : 4  value : contribute
Key : 5  value : code

创建SortedMap对象

由于SortedMap是一个接口,所以不能创建SortedMap类型的对象。我们总是需要一个扩展这个列表的类来创建一个对象。而且,在Java 1.5中引入泛型后,还可以限制可以存储在SortedMap中的对象的类型。这个类型安全的地图可以定义为。

// Obj1, Obj2是要存储在SortedMap中的对象的类型
SortedMap<Obj1, Obj2> set = new TreeMap<Obj1, Obj2> ();

在SortedMap上执行各种操作

由于SortedMap是一个接口,它只能与实现该接口的类一起使用。 TreeMap 就是实现SortedMap接口的类。现在,让我们看看如何在TreeMap上执行几个常用的操作。

1.添加元素: 为了向SortedMap添加一个元素,我们可以使用 put() 方法。但是,在TreeMap中不保留插入顺序。在内部,对于每一个元素,键都是按照升序进行比较和排序的。

// Java program add the elements in the SortedMap
import java.io.*;
import java.util.*;
class GFG {
  
    // Main Method
    public static void main(String args[])
    {
        // Default Initialization of a
        // SortedMap
        SortedMap tm1 = new TreeMap();
  
        // Initialization of a SortedMap
        // using Generics
        SortedMap<Integer, String> tm2
            = new TreeMap<Integer, String>();
  
        // Inserting the Elements
        tm1.put(3, "Geeks");
        tm1.put(2, "For");
        tm1.put(1, "Geeks");
  
        tm2.put(new Integer(3), "Geeks");
        tm2.put(new Integer(2), "For");
        tm2.put(new Integer(1), "Geeks");
  
        System.out.println(tm1);
        System.out.println(tm2);
    }
}

输出

{1=Geeks, 2=For, 3=Geeks}
{1=Geeks, 2=For, 3=Geeks}

2.改变元素: 在添加元素后,如果我们想改变元素,可以通过put()方法再次添加元素来完成。由于SortedMap中的元素是用键来索引的,所以键的值可以通过简单地插入我们想改变的键的更新值来改变。

// Java program to change
// the elements in SortedMap
import java.io.*;
import java.util.*;
class GFG {
    
      // Main Method
    public static void main(String args[])
    {
        // Initialization of a SortedMap
        // using Generics
        SortedMap<Integer, String> tm
            = new TreeMap<Integer, String>();
  
        // Inserting the Elements
        tm.put(3, "Geeks");
        tm.put(2, "Geeks");
        tm.put(1, "Geeks");
  
        System.out.println(tm);
  
        tm.put(2, "For");
  
        System.out.println(tm);
    }
}

输出

{1=Geeks, 2=Geeks, 3=Geeks}
{1=Geeks, 2=For, 3=Geeks}

3.删除元素: 为了从SortedMap中删除一个元素,我们可以使用 remove() 方法。该方法接收键值,如果该键存在于地图中,则从该SortedMap中删除该键的映射。

// Java program to remove the 
// elements from SortedMap
import java.io.*;
import java.util.*;
  
class GFG {
    
      // Main Method
    public static void main(String args[])
    {
        // Initialization of a SortedMap
        // using Generics
        SortedMap<Integer, String> tm
            = new TreeMap<Integer, String>();
  
        // Inserting the Elements
        tm.put(3, "Geeks");
        tm.put(2, "Geeks");
        tm.put(1, "Geeks");
        tm.put(4, "For");
  
        System.out.println(tm);
  
        tm.remove(4);
  
        System.out.println(tm);
    }
}

输出

{1=Geeks, 2=Geeks, 3=Geeks, 4=For}
{1=Geeks, 2=Geeks, 3=Geeks}

4.迭代排序后的Map: 有多种方法可以迭代Map。最著名的方法是使用一个增强的for循环并获得键。通过使用getValue()方法可以找到键的值。

// Java program to iterate through SortedMap
import java.util.*;
  
class GFG {
    
      // Main Method
    public static void main(String args[])
    {
        // Initialization of a SortedMap
        // using Generics
        SortedMap<Integer, String> tm
            = new TreeMap<Integer, String>();
  
        // Inserting the Elements
        tm.put(3, "Geeks");
        tm.put(2, "For");
        tm.put(1, "Geeks");
  
        for (Map.Entry mapElement : tm.entrySet()) {
            int key = (int)mapElement.getKey();
  
            // Finding the value
            String value = (String)mapElement.getValue();
  
            System.out.println(key + " : " + value);
        }
    }
}

输出

1 : Geeks
2 : For
3 : Geeks

实现SortedMap接口的类是TreeMap

在集合框架中实现的TreeMap类是对SortedMap接口的实现,SortedMap扩展了Map接口。它的行为就像一个简单的地图,不同的是它以排序的方式存储键。TreeMap使用树形数据结构进行存储。对象以排序、升序的方式存储。但我们也可以通过传递一个比较器来以降序存储。让我们看看如何使用这个类来创建一个排序的Map对象。

// Java program to demonstrate the
// creation of SortedMap object using
// the TreeMap class
  
import java.util.*;
  
class GFG {
  
    public static void main(String[] args)
    {
        SortedMap<String, String> tm
            = new TreeMap<String, String>(new Comparator<String>() {
                  public int compare(String a, String b)
                  {
                      return b.compareTo(a);
                  }
              });
  
        // Adding elements into the TreeMap
        // using put()
        tm.put("India", "1");
        tm.put("Australia", "2");
        tm.put("South Africa", "3");
  
        // Displaying the TreeMap
        System.out.println(tm);
  
        // Removing items from TreeMap
        // using remove()
        tm.remove("Australia");
        System.out.println("Map after removing "
                           + "Australia:" + tm);
    }
}

输出

{South Africa=3, India=1, Australia=2}
Map after removing Australia:{South Africa=3, India=1}

SortedMap接口的方法

方法 描述
comparator() 返回用于对该地图中的键进行排序的比较器,如果该地图使用其键的自然排序,则返回空。
entrySet() 返回该地图中包含的映射的Set视图。
firstKey() 返回当前该地图中的第一个(最低)键。
headMap(K toKey) 返回此地图中键值严格小于toKey的部分的视图。
keySet() 返回该地图中包含的键的Set视图。
lastKey() 返回当前该地图中的最后一个(最高)键。
subMap(K fromKey, K toKey) 返回该地图中键值范围从fromKey(包括)到toKey(不包括)的部分的视图。
tailMap(K fromKey) 返回该地图中键值大于或等于fromKey的部分的视图。
values() 返回该地图中包含的值的集合视图。

从java.util.Map接口继承的方法

方法 描述
clear() 该方法用于清除和删除指定的Map集合中的所有元素或映射。
containsKey(Object) 这个方法用来检查一个特定的键是否被映射到地图中。 它以键元素为参数,如果该元素在地图中被映射,则返回True。
containsValue(Object) 该方法用于检查一个特定的值是否被地图中的一个或多个键所映射。 它以值为参数,如果该值被地图中的任何一个键所映射,则返回True。
entrySet() 该方法用于创建一个由地图中包含的相同元素组成的集合。它基本上返回一个地图的集合视图,或者我们可以创建一个新的集合并将地图元素存储到其中。
equals(Object) 这个方法用于检查两个地图之间是否相等。它验证作为参数传递的一个地图的元素是否与这个地图的元素相等。
get(Object) 该方法用于检索或获取由参数中提到的特定键映射的值。当地图不包含该键的映射时,它返回NULL。
hashCode() 该方法用于为包含键和值的给定地图生成一个hashCode。
isEmpty() 这个方法用来检查一个地图是否有任何关于键和值对的条目。如果没有映射存在,那么该方法返回true。
keySet() 该方法用于返回该地图中包含的键的Set视图。这个集合是由地图支持的,所以地图的变化会反映在这个集合中,反之亦然。
put(Object, Object) 这个方法用来把指定的值和这个地图中指定的键联系起来。
putAll(Map) 该方法用于将指定地图中的所有映射复制到该地图中。
remove(Object) 如果地图中存在某个键的映射,该方法用于从该地图中删除该键的映射。
size() 该方法用于返回地图中可用的键/值对的数量。
values() 这个方法用来从地图的值中创建一个集合。它基本上返回HashMap中数值的一个集合视图。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程