爪哇 中的TreeMap示例
树状图类实现类似于HashMap的Map。
有关TreeMap的一些重要点:
- 树状图实现Map接口并扩展HashMap类。
- 树状图是使用基于红黑树的NavigableMap来实现的。
- 树状图是有序集合,并以键的自然顺序存储其元素。
- 您要放入TreeMap中的密钥必须实现Comaparable接口,或者可以使用Comparator进行自定义排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
包 组织 .Arpit.爪哇2blog; 进口 爪哇. 实用程序 .树状图; 上市 类 树状图Main { 上市 静态的 虚空 主要 (串 args []) { //以国家/地区为键,资本为值的TreeMap // 树状图以键的自然顺序存储元素。 树状图<串,串> 国家CapitalMap= 新 树状图<串,串>(); 国家CapitalMap. 放 (“印度”,“德里”); 国家CapitalMap. 放 (“日本”,“东京”); 国家CapitalMap. 放 (“法国”,“巴黎”); 国家CapitalMap. 放 (“俄国”,“莫斯科”); 系统. 出 .打印(“ - ---------------------------”); //使用keySet()并针对每个循环迭代TreeMap 系统. 出 .打印(“使用keySet()并针对每个循环迭代TreeMap”); 对于 (串 国家Key:国家CapitalMap.键集()) { 系统. 出 .打印(“国家:”+ 国家Key +“和 Capital:"+国家CapitalMap. 得到 (国家Key)); } 系统. 出 .打印(“ - ---------------------------”); } } |
当您运行上述程序时,将得到以下输出:
1 2 3 4 5 6 7 8 9 |
- - - - - - - - - - - - - - - 反复进行 树状图 使用 键集() 和 对于 每 循环 国家:法国 和 首都:巴黎 国家:印度 和 首都:新德里 国家:日本 和 首都:东京 国家:俄国 和 首都:莫斯科 - - - - - - - - - - - - - - - |
如您所见,它以Key(Country)的升序排序
如果要自定义排序而不是自然排序怎么办:
如果要自定义排序,则可以使用下面的TreeMap构造函数。您可以定义自己的比较器。
1 2 3 |
树状图 国家CapitalMap= 新 树状图(比较器 补偿 ); |
示例:如下创建Country.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
包 组织 .Arpit.爪哇2blog; 上市 类 国家 { 串 名称 ; 长 人口; 上市 国家(串 名称 , 长 人口) { 超(); 这个 .名称 = 名称 ; 这个 .人口 = 人口; } 上市 串 得到 Name() { 返回 名称 ; } 上市 虚空 setName(串 名称 ) { 这个 .名称 = 名称 ; } 上市 长 得到 Population() { 返回 人口; } 上市 虚空 setPopulation( 长 人口) { 这个 .人口 = 人口; } } |
创建TreeMapCompMain,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
包 组织 .Arpit.爪哇2blog; 进口 爪哇. 实用程序 .比较器; 进口 爪哇. 实用程序 .迭代器; 进口 爪哇. 实用程序 .树状图; 上市 类 树状图CompMain { 上市 静态的 虚空 主要 (串[] args ) { 国家 印度= 新 国家(“印度”,1000); 国家 日本= 新 国家(“日本”,10000); 国家 法国= 新 国家(“法国”,2000); 国家 俄国= 新 国家(“俄国”,20000); 比较器 比较器= 新 比较器() { @覆写 上市 整型 相比(国家 o1, 国家 o2) { 返回 o2. 得到 Name().相比于(o1. 得到 Name()); } }; 系统. 出 .打印(“按相反的国家名称排序TreeMap”); 树状图<国家, 串> 国家CapitalMap= 新 树状图<国家,串>(比较器); 国家CapitalMap. 放 (印度,“德里”); 国家CapitalMap. 放 (日本,“东京”); 国家CapitalMap. 放 (法国,“巴黎”); 国家CapitalMap. 放 (俄国,“莫斯科”); 迭代器 国家CapitalIter=国家CapitalMap.键集().迭代器();//将调试点放在这一行 而(国家CapitalIter.hasNext()) { 国家 国家Obj=国家CapitalIter. 下一个 (); 串 首都=国家CapitalMap. 得到 (国家Obj); 系统. 出 .打印(国家Obj. 得到 Name()+“ - --”+首都); } } } |
当您运行上述程序时,将获得以下输出:
1 2 3 4 5 6 7 |
排序 树状图 在 逆转 订购 的 国家 名称 俄国 - - 莫斯科 日本 - - 东京 印度 - - 新德里 法国 - - 巴黎 |
您可以将HashMap传递给TreeMap的构造函数以对Key进行排序
1 2 3 |
树状图 国家CapitalMap= 新 树状图( 地图 嗯 ); |
通过将HashMap传递给TreeMap的构造函数,可以对TreeMap进行排序。
例:
如下创建Country.java。它应该实现Comparable接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
包 组织 .Arpit.爪哇2blog; 上市 类 国家 实施 可比 { 串 名称 ; 长 人口; 上市 国家(串 名称 , 长 人口) { 超(); 这个 .名称 = 名称 ; 这个 .人口 = 人口; } 上市 串 得到 Name() { 返回 名称 ; } 上市 虚空 setName(串 名称 ) { 这个 .名称 = 名称 ; } 上市 长 得到 Population() { 返回 人口; } 上市 虚空 setPopulation( 长 人口) { 这个 .人口 = 人口; } @覆写 上市 整型 相比于(目的 o) { 国家 国家=(国家) o; 返回 这个 . 得到 Name().相比于(国家. 得到 Name()); } } |
如下创建TreeMapCompMain.java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
包 组织 .Arpit.爪哇2blog; 进口 爪哇. 实用程序 .哈希图; 进口 爪哇. 实用程序 .迭代器; 进口 爪哇. 实用程序 .树状图; 上市 类 树状图CompMain { 上市 静态的 虚空 主要 (串[] args ) { 国家 印度= 新 国家(“印度”,1000); 国家 日本= 新 国家(“日本”,10000); 国家 法国= 新 国家(“法国”,2000); 国家 俄国= 新 国家(“俄国”,20000); 哈希图<国家, 串> 国家CapitalMap= 新 哈希图<国家,串>(); 国家CapitalMap. 放 (印度,“德里”); 国家CapitalMap. 放 (日本,“东京”); 国家CapitalMap. 放 (法国,“巴黎”); 国家CapitalMap. 放 (俄国,“莫斯科”); 系统. 出 .打印(“通过将HashMap传递给TreeMap构造函数进行排序”); 树状图<国家,串> sortedTreeMapCountryCapital= 新 树状图<国家,串> (国家CapitalMap); 迭代器 国家CapitalIter=sortedTreeMapCountryCapital.键集().迭代器();//将调试点放在这一行 而(国家CapitalIter.hasNext()) { 国家 国家Obj=国家CapitalIter. 下一个 (); 串 首都=国家CapitalMap. 得到 (国家Obj); 系统. 出 .打印(国家Obj. 得到 Name()+“ - --”+首都); } } } |
运行程序时,将获得以下输出:
1 2 3 4 5 6 7 |
排序 哈希图 通过 通过 它 至 树状图 建设者 法国 - - 巴黎 印度 - - 新德里 日本 - - 东京 俄国 - - 莫斯科 |