码迷,mamicode.com
首页 > 编程语言 > 详细

java HashSet 与 TreeSet

时间:2016-07-31 00:02:04      阅读:485      评论:0      收藏:0      [点我收藏+]

标签:

Set接口并没有对Collection接口进行扩充,只是比Collection接口要求更加严格了,不能增加重复的元素,并且采用散列的储存方式,所以没有顺序

import java.util.Set;
import java.util.HashSet;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
        //Set allSet = new HashSet();//@结果 1
        Set allSet = new TreeSet();//@ 结果 2 java.lang.ClassCastException
        allSet.add(new Person("赵一",21));
        allSet.add(new Person("钱二",22));
        allSet.add(new Person("孙三",23));
        allSet.add(new Person("李四",24));
        allSet.add(new Person("周五",25));
        allSet.add(new Person("周五",25));
        
        allSet.add("A");allSet.add("A");
        System.out.println(allSet);
        
    }
}

class Person {
    String name;
    int age;
    
    Person(String name,int age) {
        this.name = name;
        this.age = age;    
    }
    
    public String toString() {
        return this.name + this.age;    
    }
}

/*
1.Set添加重复对象,编译期间可以通过,但是添加不了重复对象,对于重复元素只会添加一次。
2.Set集类程序运行时向集合中加入元素的顺序并不是集合中的保存顺序。
3.TreeSet中的元素是有序存放的,TreeSet每个对象所在的类都必须实现Comparable接口才能使用
*/

技术分享

TreeSet类中如果比较器中某个属性没有比较,则会认为是同一个对象。

import java.util.Set;
import java.util.HashSet;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
        Set allSet = new TreeSet();
        allSet.add(new Person("赵一",21));
        allSet.add(new Person("钱二",22));
        allSet.add(new Person("孙三",23));
        allSet.add(new Person("李四",24));
        allSet.add(new Person("周五",25));
        allSet.add(new Person("周五",25));
        allSet.add(new Person("郑六",25));
        

        System.out.println(allSet);
        
    }
}

class Person implements Comparable<Person> {//? 为什么一定要写Comparable<Person>
    String name;
    int age;
    
    Person(String name,int age) {
        this.name = name;
        this.age = age;    
    }
    
    public String toString() {
        return this.name + this.age;    
    }
    
  public int compareTo(Person p) {
        
        //对象比较
        if (this.age > p.age) {
            return 100;    
        }
        if (this.age < p.age) {
            return -100;    
        }
        //return 0;//并不能把(郑六,15)添加进去
        //名字字符串的比较
        return this.name.compareTo(p.name);
                
    }
    
}


/*
1.TreeSet中的元素是有序存放的,TreeSet每个对象所在的类都必须实现Comparable接口才能使用
2.如果比较器中某个属性没有比较,则会认为是同一个对象。
3.此程序中并没有写equals()和hashCode()方法。全部由compareTo()方法完成。
*/

技术分享

一个完整的类应该重写equals(),toString(),hashCode()方法

import java.util.Set;
import java.util.HashSet;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
        Set allSet = new TreeSet();
        allSet.add(new Person("赵一",21));
        allSet.add(new Person("钱二",22));
        allSet.add(new Person("孙三",23));
        allSet.add(new Person("李四",24));
        allSet.add(new Person("周五",25));
        allSet.add(new Person("周五",25));
        allSet.add(new Person("郑六",25));
        

        System.out.println(allSet);
        
    }
}

class Person implements Comparable<Person> {
//class Person{
    String name;
    int age;
    
    Person(String name,int age) {
        this.name = name;
        this.age = age;    
    }
    
    public String toString() {
        return this.name + this.age;    
    }
    
    
    public boolean equals(Object obj) {
        if (obj instanceof Person) {
            Person p = (Person)obj;
            if (this.name.equals(p.name) && this.age == p.age) {
                return true;    
            }
        }
        if (this == obj) {
            return true;    
        }
        return false;
    }
    
    public int hashCode() {
        return this.name.hashCode() * this.age;    
  }
  
    public int compareTo(Person p) {
        
        //年龄比较
        if (this.age > p.age) {
            return 100;    
        }
        if (this.age < p.age) {
            return -100;    
        }
        //return 0;//并不能把(郑六,15)添加进去
        return this.name.compareTo(p.name);
    }
}


/*
1.一个完整的类应该重写equals(),toString(),hashCode();方法
*/

技术分享

 

java HashSet 与 TreeSet

标签:

原文地址:http://www.cnblogs.com/yhwsy/p/5721895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!