在java中的树
时间:2020-02-23 14:35:38 来源:igfitidea点击:
在本教程中,我们将看看在Java中的TreeSet。
Java Treeet具有以下属性:
- 它只能包含唯一的元素。
- 它默认情况下以升序存储对象,
- 它实现了扩展SortedSet的Navigableset接口。
- 将对象放在TreeSet中时,它必须实现可比接口。
例子:
1)创建一个名为countrous.java的类。
package com.org.igi.theitroad; public class Country implements Comparable{ String countryName; public Country(String countryName) { super(); this.countryName = countryName; } @Override public int compareTo(Object arg0) { Country country=(Country) arg0; return (this.countryName.compareTo(country.countryName) ) ; } public String getCountryName() { return countryName; } public void setCountryName(String countryName) { this.countryName = countryName; } }
2)创建TreeTemain.java如下:
package com.org.igi.theitroad; import java.util.Iterator; import java.util.TreeSet; public class TreeSetMain { /** * @author igi Mandliya */ public static void main(String[] args) { Country NetherlandsCountry=new Country("Netherlands"); Country chinaCountry=new Country("China"); Country nepalCountry=new Country("Nepal"); Country bhutanCountry=new Country("Bhutan"); Country NetherlandsCountry2=new Country("Netherlands"); Country nepalCountry2=new Country("Nepal"); TreeSet countryTreeSet = new TreeSet(); countryTreeSet.add(NetherlandsCountry); countryTreeSet.add(chinaCountry); countryTreeSet.add(nepalCountry); countryTreeSet.add(bhutanCountry); countryTreeSet.add(NetherlandsCountry2); countryTreeSet.add(nepalCountry2); Iterator counIter=countryTreeSet.iterator(); //put debug point here while(counIter.hasNext()) { System.out.println(counIter.next().countryName); } } }
运行上面的程序时,我们可以如下所示:
Bhutan China Netherlands Nepal
正如我们所看到的,我们在树段中添加了6个国家对象,但我们只有4个!!由于树木集只能具有独特的元素,Netherlandscountry2和Nepalcountr2没有添加到树梢上。
解释:
当我们将Netherlandscountr2放入树瓣中时,将此对象与Netherlandscountry2.CPareto(厌恶)和Compareto方法将其与Netherlandscountry进行比较。
两个物体将视为平等。
由于我们不能在TreeSet中添加重复元素,因此Netherlandscountry2不会被添加到高于TreeSet中。
现在将调试点放在第22行,并右键单击"项目 - >调试" - > Java应用程序。
程序将在第27行停止执行,然后右键单击CountRefeet然后选择Watch.You将能够看到如下结构。
关于TreeSet的棘手问题:
猜测以下程序的输出:
package com.org.igi.theitroad; import java.util.Iterator; import java.util.TreeSet; public class Employee implements Comparable { public String name; public int compareTo(Object o) { return 0; } public static void main(String args []) { Employee employeeOne = new Employee(); Employee employeeTwo = new Employee(); employeeOne.name= "John"; employeeTwo.name= "Martin"; TreeSet employeeSet = new TreeSet(); employeeSet.add(employeeOne); employeeSet.add(employeeTwo); Iterator empIt=employeeSet.iterator(); while(empIt.hasNext()) { System.out.println(empIt.next().name); } } }
上述计划的输出将是什么:
A. Martin
B. John
C. John Martin
D.汇编失败了。
E.代码运行,没有输出。
F.在运行时抛出异常。
正确的答案是b。
解释:
正如我们所看到的,我们在员工类中重写(overwriting)了Compareto方法,总是返回0。
将进行以下步骤:
- "John"的第一个元素将被添加到员工集中。
- 当我们将第二个元素添加到Martin时,Compareto方法将被UppliceAne.com.cncareto(雇员WO)调用,它将返回0。
- 随着Compareto方法返回0,EmployEleOne等于雇员的WO,因此员工无法将员工添加到TreeSet中。
- 所以上述计划的输出是"约翰"