Java中TreeSet类如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
蒲城ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:13518219792(备注:SSL证书合作)期待与您的合作!首先自定义一个Student类,类里面有三个属性,分别是姓名、学号、年龄
public class Student{ private String name; private String num; private int age; Student(String name, String num, int age) { this.name = name; this.num = num; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
然后我们给这个类的三个属性添加值,并且将类的实例化对象添加到TreeSet类中。
注意:TreeSet类是没有get方法的,要输出里面的内容得通过foreach循环或者迭代器输出,如果直接通过print进行输出,显示的是内存地址对象。
然后我们来看下输出结果
import java.util.Iterator; import java.util.Set; public class TreeSet { public static void main(String[] args) { Student s1 = new Student("张珊", "111213", 18); Student s2 = new Student("隔壁", "111215", 19); Student s3 = new Student("翠花", "111214", 12); Student s4 = new Student("老王", "111212", 11); Student s5 = new Student("老黑", "111212", 11); Set set = new java.util.TreeSet(); set.add(s1); set.add(s2); set.add(s3); set.add(s4); set.add(s5); // 通过迭代器输出结果 Iterator iterator = set.iterator(); while (iterator.hasNext()) { Student o = (Student) iterator.next(); System.out.println(o.getName()); } } }
可以看到无法正常输出,报错。这里报错的原因是类型转换错误。因为将对象存入TreeSet类中时需要对对象进行一个比较,第一次存入时因为没有可对比的对象,所以不会报错,但是当第二个对象存入时需要同第一个对象进行比较,再决定在二叉树中存放的位置。这里的比较方法需要我们自己去实现Comparable<>接口重写一个compareTo()方法。
那么现在在自定义Student类中实现Comparable并且重现compareTo()方法
public class Student implements Comparable{ private String name; private String num; private int age; Student(String name, String num, int age) { this.name = name; this.num = num; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public int compareTo(Student o) { //通过年龄的比较确定存放顺序 return this.age-o.age; } }
现在看下输出结果
可以看到存入的内容可以正常输出的了,但是老黑没有输出,这是因为老黑和老王的年龄相同,而我们重写的compareTo()方法中的比较条件就是年龄。下面来看看这个方法中的返回值的含义。
@Override public int compareTo(Student o) { return 0;
return 1;
return -1;
}
compareTo()方法的返回值类型是int类型,在这里只存在三种情况,分别是:大于0,小于0,和等于0。
TreeSet的底层结构是一个二叉树,每次插入的对象都会根据二叉树的结构进行排列。当前后两个对象的条件进行比较返回正数时,后一个对象会存在已前一个对象为根的右节点;当前后两个对象的条件进行比较返回负数时,后一个对象会存在已前一个对象为根的左节点;当前后两个对象的条件进行比较返回0时,后一个对象不存入TreeSet中。因为老黑和老王年龄相同,所以这里名字为老黑的对象就不存入了。
看完上述内容,你们掌握Java中TreeSet类如何使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联网站建设公司行业资讯频道,感谢各位的阅读!
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。