Java中TreeSet中添加自定义对象
List:元素是有索引的,元素可以重复
Set:元素之间无索引,不可以重复(不可以放同样的元素,放不进去)
数据存储方式:
HashSet:哈希表
TreeSet:二叉树
有序,存自定义对象时的排序问题
小结三种方法解决cannot be cast to java.lang.Comparable
Comparable=可比较的
a.Source重写
b.Alt+Shift+S可以调出重写方法的菜单
c.跟错误提示走
方法一:传入对象所属的类,必修实现Comparable
package javastudy;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
import javax.print.attribute.standard.PrinterLocation;
import org.omg.IOP.TAG_MULTIPLE_COMPONENTS;
public class testit3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<Person> tsP=new TreeSet<Person>();
tsP.add(new Person("Jack",20));
tsP.add(new Person("Mary",18));
tsP.add(new Person("Mike",25));
Iterator<Person>it1=tsP.iterator();
while(it1.hasNext())
{
Person p=it1.next();
p.print();
//TreeSetn本身是无序的,因此不实现接口就打印不出想要的结果
}
}
}
class Person implements Comparable<Person>
{
String name;
int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
void print()
{
System.out.println(String.format("姓名=%s,年龄=%d", name,age));
}
//重写compareTo
//比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
if(this.age>o.age)
{
return 1;
}
else if(this.age<o.age)
{
return -1;
}
else {
return 0;
}
}
}
输出结果:
按年龄由大到小排序输出了
方法二:初始化TreeSet时。传入一个比较器(比较器是一个实现了Comparable的类的对象)作为一个构造参数
package javastudy;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
import javax.print.attribute.standard.PrinterLocation;
import org.omg.IOP.TAG_MULTIPLE_COMPONENTS;
public class testit3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<Dog> tsD=new TreeSet<Dog>(new MyCom());
tsD.add(new Dog("MaoMao", 5));
tsD.add(new Dog("DuoTai", 15));
tsD.add(new Dog("NiuNiu", 8));
Iterator<Dog>it2=tsD.iterator();
while(it2.hasNext())
{
System.out.println(it2.next());
}
}
}
class Dog
{ String name;
int weight;
Dog(String name, int weight)
{
this.name=name;
this.weight=weight;
}
@Override
public String toString() {
return "name=" + name + ", weight=" + weight;
}
}
//定义一个比较器
class MyCom implements Comparator<Dog>
{
@Override
public int compare(Dog o1, Dog o2) {
// TODO Auto-generated method stub
return o1.name.compareTo(o2.name);
}
}
输出结果:
按首字母顺序排序输出了