比较整集
Posted zxl1010
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较整集相关的知识,希望对你有一定的参考价值。
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;
以上是关于比较整集的主要内容,如果未能解决你的问题,请参考以下文章