第四章 java中的TreeMap与示例


TreeMap 类实现类似于 HashMap 的 Map。

关于 TreeMap 的一些要点:

  1. TreeMap 实现了 Map 接口并扩展了 HashMap 类。
  2. TreeMap 是使用基于红黑树的 NavigableMap 实现的。
  3. TreeMap 是有序集合,并以键的自然顺序存储其元素。
  4. 您要放入 TreeMap 的键必须实现 Comaparable 接口,或者您可以使用 Comparator 进行自定义排序

例子:

package org.arpit.java2blog;

import java.util.TreeMap;

public class TreeMapMain {

    public static void main(String args[])
    {
        // TreeMap with Country as key and capital as value
        // TreeMap stores elements in natural ordering of keys. 
        TreeMap<String,String> countryCapitalMap=new TreeMap<String,String>();
        countryCapitalMap.put("India","Delhi");
        countryCapitalMap.put("Japan","Tokyo");
        countryCapitalMap.put("France","Paris");
        countryCapitalMap.put("Russia","Moscow");

        System.out.println("-----------------------------");
        // Iterating TreeMap Using keySet() and for each loop
        System.out.println("Iterating TreeMap Using keySet() and for each loop");
        for (String countryKey:countryCapitalMap.keySet()) {
            System.out.println("Country:"+ countryKey +" and  Capital:"+countryCapitalMap.get(countryKey));

        }
        System.out.println("-----------------------------");
    }

}

当你运行上面的程序时,你会得到以下输出:

-----------------------------
Iterating TreeMap Using keySet() and for each loop
Country:France and  Capital:Paris
Country:India and  Capital:Delhi
Country:Japan and  Capital:Tokyo
Country:Russia and  Capital:Moscow
-----------------------------

可以看到,它是按照 Key(Country) 的升序排列的

如果您想要自定义排序而不是自然排序怎么办:

如果你想要自定义排序,那么你可以使用下面的 TreeMap 构造函数。您可以定义自己的比较器。

TreeMap countryCapitalMap=new TreeMap(Comparator comp);

示例:创建 Country.java 如下

package org.arpit.java2blog;  
public class Country {  

    String name;  
    long population;  

    public Country(String name, long population) {  
        super();  
        this.name = name;  
        this.population = population;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public long getPopulation() {  
        return population;  
    }  
    public void setPopulation(long population) {  
        this.population = population;  
    }  

}

创建 TreeMapCompMain 如下:

package org.arpit.java2blog;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeMap;

public class TreeMapCompMain {

    public static void main(String[] args)
    {
        Country india=new Country("India",1000);  
        Country japan=new Country("Japan",10000);  

        Country france=new Country("France",2000);  
        Country russia=new Country("Russia",20000);  

        Comparator comparator=new Comparator() {

            @Override
            public int compare(Country o1, Country o2) {
                return o2.getName().compareTo(o1.getName());
            }
        };

        System.out.println("Sorting TreeMap in reverse order of country name");
        TreeMap<Country, String> countryCapitalMap=new TreeMap<Country,String>(comparator);  
        countryCapitalMap.put(india,"Delhi");  
        countryCapitalMap.put(japan,"Tokyo");  
        countryCapitalMap.put(france,"Paris");  
        countryCapitalMap.put(russia,"Moscow");  

        Iterator countryCapitalIter=countryCapitalMap.keySet().iterator();//put debug point at this line  
        while(countryCapitalIter.hasNext())  
        {  
            Country countryObj=countryCapitalIter.next();  
            String capital=countryCapitalMap.get(countryObj);  
            System.out.println(countryObj.getName()+"----"+capital);  
        }  
    }  

}

当你运行上面的程序时,你会得到下面的输出:

Sorting TreeMap in reverse order of country name
Russia----Moscow
Japan----Tokyo
India----Delhi
France----Paris

您可以将 HashMap 传递给 TreeMap 的构造函数以在 Key 上对其进行排序

TreeMap countryCapitalMap=new TreeMap(Map hm);

通过将 HashMap 传递给 TreeMap 的构造函数,可以对 TreeMap 进行排序。示例:如下 创建 Country.java。它应该实现 Comparable 接口

package org.arpit.java2blog;  
public class Country implements Comparable {  

    String name;  
    long population;  

    public Country(String name, long population) {  
        super();  
        this.name = name;  
        this.population = population;  
    }  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public long getPopulation() {  
        return population;  
    }  
    public void setPopulation(long population) {  
        this.population = population;  
    }
    @Override
    public int compareTo(Object o) {
        Country country=(Country) o;
        return this.getName().compareTo(country.getName());
    }  

}

创建 TreeMapCompMain.java 如下:

package org.arpit.java2blog;

import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeMap;

public class TreeMapCompMain {

    public static void main(String[] args)
    {
        Country india=new Country("India",1000);  
        Country japan=new Country("Japan",10000);  

        Country france=new Country("France",2000);  
        Country russia=new Country("Russia",20000);  

        HashMap<Country, String> countryCapitalMap=new HashMap<Country,String>();  
        countryCapitalMap.put(india,"Delhi");  
        countryCapitalMap.put(japan,"Tokyo");  
        countryCapitalMap.put(france,"Paris");  
        countryCapitalMap.put(russia,"Moscow");  

        System.out.println("Sorting HashMap by passing it to TreeMap constructor");
        TreeMap<Country,String> sortedTreeMapCountryCapital=new  TreeMap<Country,String> (countryCapitalMap);
        Iterator countryCapitalIter=sortedTreeMapCountryCapital.keySet().iterator();//put debug point at this line  
        while(countryCapitalIter.hasNext())  
        {  
            Country countryObj=countryCapitalIter.next();  
            String capital=countryCapitalMap.get(countryObj);  
            System.out.println(countryObj.getName()+"----"+capital);  
        }  
    }  

}

运行程序时,您将得到以下输出:

Sorting HashMap by passing it to TreeMap constructor
France----Paris
India----Delhi
Japan----Tokyo
Russia----Moscow


原文链接:https://codingdict.com/