Java中的Treemap例子
时间:2020-02-23 14:35:38 来源:igfitidea点击:
Treemap类实现映射类似于HashMap。
关于Treemap的一些重要知识点:
- Treemap实现映射界面并扩展HashMap类。
- Treemap使用基于红色的黑树的NavigableMap实现。
- Treemap是排序的collection,并将其元素存储在自然排序的键中。
- 我们希望放入Triemap的键必须实现可调客界面,或者我们可以使用比较器进行自定义排序
例子:
package org.igi.theitroad;
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("Netherlands","Amsterdam");
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:Netherlands and Capital:Amsterdam Country:Japan and Capital:Tokyo Country:Russia and Capital:Moscow ----------------------------
正如我们所看到的,它按键值(国家)的升序排序
如果我们想要自定义排序而不是自然排序,该怎么办:
如果我们想要自定义排序,则可以使用Treemap构造函数下面。
我们可以定义自己的比较器。
TreeMap countryCapitalMap=new TreeMap(Comparator comp);
示例:创建Country.java如下
package org.igi.theitroad;
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;
}
}
创建TriemapCompMain如下所示:
package org.igi.theitroad;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeMap;
public class TreeMapCompMain {
public static void main(String[] args)
{
Country Netherlands=new Country("Netherlands",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(Netherlands,"Amsterdam");
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 Netherlands----Amsterdam France----Paris
我们可以将HashMap传递给Treemap的构造函数,以将其排列在键上
TreeMap countryCapitalMap=new TreeMap(Map hm);
通过将HashMap传递给Treemap的构造函数,我们可以对Treemap进行排序。
示例:创建Country.java如下。
它应该实现可比较的界面
package org.igi.theitroad;
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.igi.theitroad;
import java.util.HashMap;
import java.util.Iterator;
import java.util.TreeMap;
public class TreeMapCompMain {
public static void main(String[] args)
{
Country Netherlands=new Country("Netherlands",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(Netherlands,"Amsterdam");
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 Netherlands----Amsterdam Japan----Tokyo Russia----Moscow

