为什么会用到集合类?
面向对象语言对事物的体现都是以对象的方式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
数组虽然也可以存储对象,但长度固定。集合长度可变。数组中可以存储基本数据类型,集合只能存储对象。
集合类自身的特点
只用于存储对象,长度可变,能够存储不同类型的对象。
容器分了很多种,因此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); }
时间: 2024-11-09 05:08:34