首页 > 代码库 > 黑马程序员-学习日记(集合类之TreeSet)
黑马程序员-学习日记(集合类之TreeSet)
为什么会用到集合类?
面向对象语言对事物的体现都是以对象的方式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
数组虽然也可以存储对象,但长度固定。集合长度可变。数组中可以存储基本数据类型,集合只能存储对象。
集合类自身的特点
只用于存储对象,长度可变,能够存储不同类型的对象。
容器分了很多种,因此Java工程师对其进行了划分。这个划分成的体系就被成为集合框架。
import java.util.*;class mapDemo{ public static void main(String[] args) { TreeSet ts = new TreeSet(); ts.add(new student("Truson",22)); ts.add(new student("Amy",21)); ts.add(new student("Ben",19));
ts.add(new student("Boston",19)); Iterator it = ts.iterator(); while(it.hasNext()) { student s = (student)it.next(); System.out.println(s); } }}class student implements Comparable{ String name; int age; student(String name,int age) { this.name = name; this.age = age; } int getAge() { return age; } String getName() { return name; }}
能通过编译,但运行时报出了异常。原来TreeSet可以对Set集合中元素按字母顺序进行排序。但集合中若是存入了对象,程序就不知道依据什么标准对元素进行排序。此时的对象不具备比较性,从而报出异常。于是查阅API后发现必须要实现一接口Comparable<T>,此接口强制让学生具备比较性。
于是更改代码如下:
import java.util.*;class mapDemo{ public static void main(String[] args) { TreeSet ts = new TreeSet(); ts.add(new student("Truson",22)); ts.add(new student("Amy",21)); ts.add(new student("Ben",19));
Iterator it = ts.iterator(); while(it.hasNext()) { student s = (student)it.next(); System.out.println(s); } }}class student implements Comparable{ String name; int age; student(String name,int age) { this.name = name; this.age = age; } int getAge() { return age; } String getName() { return name; } public int compareTo(Object obj) { if(!(obj instanceof student)) throw new RuntimeException("不是学生对象!"); student stu = (student)obj; System.out.println(this.name+" compare to "+stu.name); if(this.age > stu.age) return 1; if(this.age < stu.age) return -1; return 0; }}
显然,这个时候我们可以实现依照学生的年龄排序了。但依然存在问题,因为如果有两个学生年龄一样而姓名不同,便只能保存先出现的那个。于是再次修改代码。
if(this.age == stu.age) { //当主要条件相同,判断次要条件 return this.name.compareTo(s.name); }
黑马程序员-学习日记(集合类之TreeSet)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。