Java集合学习笔记(通过比较器对集合元素排序)

来源:互联网 发布:科比本赛季数据 编辑:程序博客网 时间:2024/05/17 08:02
/**
 * 1.add方法的参数类型为对象,并且是对象的引用
 * 2.List元素是有序的,元素可以重复,因为该体系有索引
 *   list特有的方法都是和索引相关的操作
 *   List的子类对象有:
 *   ArrayList--数组结构--JDK1.2开始--查询速度快--默认为10的长度--50%延长
 *   LinkedList--链表结构--插入删除快、
 *   Vector--数组结构--JDK1.0开始--线程同步,被ArrayList替代了--默认为10的长度--100%延长
 * 3.set元素是无序(存入和取出的顺序不一定一致)的,元素不可以重复
 *   HashSet--底层结构为hash表,hashset是通过hashcode和equals来保证元素唯一性
 *   如果元素的hashcode值相同,才会判断equals是否为true
 *   如果元素的hashcode值不同,才会调用equals
 *   注意:对于判断元素是否存在和删除操作,依赖的方法是元素的hashcode和equals方法
 *   ArrayList是通过equals来判断
 *   TreeSet--可以对set集合中的元素进行排序--底层是二叉树
 *     排序方式一:让元素自身具有比较性--保证元素唯一性--compareTo方法 return 0
 *     排序方式二:让集合具有比较性
 * 4.泛型--JDK1.5之后出现泛型--解决安全问题--类型安全机制
 *   好处:将运行时期出现的问题出现在编译时期
 * @author qiuzhiwen
 *
 */


class Student //implements Comparable
{
private String name;
private int age;

public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
/*@Override
public int compareTo(Object o) {
Student s=(Student) o;
if(this.age>s.age)//主要条件
return 1;
if(this.age==s.age)
return this.name.compareTo(s.name);//次要条件
return -1;
}*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}


//比较器--常用方法
class MyCompartor implements Comparator<Student>{


@Override
public int compare(Student s1, Student s2) {
int num= s1.getName().compareTo(s2.getName());//按姓名排序--主要条件
if(num==0){
if(s1.getAge()>s2.getAge())//按年龄排序--次要条件
return 1;
if(s1.getAge()==s2.getAge())
return 0;
return -1;
}
return num;
}
}


public class CollectionDemo2 {
public static void main(String[] args) {

//排序方式一:让元素具有比较性
// TreeSet<Student> ts=new TreeSet<Student>();
// ts.add(new Student("yuhao", 20));
// ts.add(new Student("xiayu", 21));
// ts.add(new Student("kang", 22));
// ts.add(new Student("mon", 22));

//排序方式二:让集合具有比较性
TreeSet<Student> ts=new TreeSet(new MyCompartor());//
ts.add(new Student("yuhao", 20));
ts.add(new Student("xiayu", 21));
ts.add(new Student("kang", 22));
ts.add(new Student("mon", 22));
ts.add(new Student("mon", 21));

for(Iterator<Student> it=ts.iterator();it.hasNext();){
Student s=it.next();
System.out.println(s.getName()+"--"+s.getAge());
}
}
}
原创粉丝点击