比较整集

HashSet集合中,数据结构是哈希表。线程非同步。 其保证元素唯一性的原理,是判断元素的HashCode值是否相同。

如果相同,还会继续判断元素的equals方法,是否为true。


 

TreeSet()构造方法摘要:

TreeSet()   :构造一个新的空Set,该Set 根据元素的自然排序进行排序。  (也就是 Comparable的  compareTo方法)      《第一种》

TreeSet(Comparator ):构造一个新的空TreeSet,它根据比较器进行排序。        《第二种》

 

TreeSet集合当中,所存元素为自己定义的,需要自己定义比较性。以 Student为例-----getName---getAge

方式:  让Student 实现 Comparable  ---- 然后覆盖它的 comepareTo方法,定义自己需要的比较功能。   (第一种排序)

import java.util.*;
public class Practice_1 {    
    public static void main(String[] args) {
        TreeSet<Student> ts = new TreeSet<Student>();
        ts.add(new Student("java001",10));
        ts.add(new Student("java004",40));
        ts.add(new Student("java003",30));
        ts.add(new Student("java002",20));
        ts.add(new Student("java008",20));
        
        Iterator<Student> it = ts.iterator();
        while(it.hasNext())
        {
            Student stu = it.next();
            sop(stu.getName()+"...."+stu.getAge());
        
        }
    }
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }
}

class Student implements Comparable
{
    private String name;
    private int age;
    Student(String name, int age)
    {
        this.name = name;
        this.age = age;
    }
    public String getName()
    {
        return name;
    }
    public int getAge()
    {
        return age;
    }
    public int compareTo(Object obj)
    {
        if(!(obj instanceof Student))
        {
            throw new RuntimeException("不是学生对象");
        }
        Student s = (Student)obj;
        if(this.age > s.age)
        {
            return 1;
        }
        if(this.age == s.age)
        {
            return this.name.compareTo(s.name);
        }
        return -1;
    }
}

 

 

元素自身不具备比较性时,或者具备的比较性不是所需要的,这时候需要让集合自身具备比较性。   (第二种排序)

在集合初始化时候,就有比较方式。 定义一个比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。

如下:   将比较器传入TreeSet()构造函数进行比较即可。

class MyCompare implements Comparator
{
    public int compare(Object o1,Object o2)
    {
        Student s1 = (Student)o1;
        Student s2 = (Student)o2;
        int num =s1.getName().compareTo(s2.getName());
        if(num == 0)
        {
            return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
        }
        return num;
    }
}

 

上一篇:在一个集合中存储了无序并且重复的字符串


下一篇:List、Set、Map的区别和关系(整理)