关于set想说的(二)之Set Demo

上篇博文关于set想说的(一)之Set的实现类及必要的方法 ,总结了一些常见的Set实现类、各自的特点,以及各自实现类需要的方法。这篇博文写一个Demo。

Person.java

package org.fan.learn.set;

/**
 * Created by Administrator on 2016/3/22.
 */
public class Person implements Comparable<Person> {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        //if (o == null || getClass() != o.getClass()) return false;
        /*
        if (!(o instanceof Person)) return false;

        Person person = (Person) o;

        return name.equals(person.name);
        */

        return o instanceof Person &&
            (name.equals(((Person) o).name));

    }

    @Override
    public int hashCode() {
        return name.hashCode();
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                '}';
    }

    public int compareTo(Person o) {
        if (this == o) return 0;
        if (o == null) return 0;

        Person person = (Person) o;
        return name.compareTo(person.name);
    }
}

其中equals()方法、hashCode()方法、toString()方法都是IDEA自动生成的。 compareTo方法IDEA会帮你生成框架,里面的内容要自己实现。

Main.java

package org.fan.learn.set;

import java.util.*;

/**
 * Created by Administrator on 2016/3/22.
 */
public class SetTest {

    public static void main(String[] args) {
        //Integer中实现了Comparable接口,实现了equals方法,hashCode方法。
//        Set<Integer> set = new HashSet<Integer>();
        Set<Integer> set = new TreeSet<Integer>();
        Collections.addAll(set, 1, 2, 1);
        System.out.println("Integer Set : " + set);

        //String中实现了Comparable接口,实现了equals方法,hashCode方法。
        //Set<String> stringSet = new HashSet<String>();
        Set<String> stringSet = new TreeSet<String>();
        //Collections.addAll(stringSet, "12", "034");
        Collections.addAll(stringSet, "12 034".split(" "));
        System.out.println("String Set : " + stringSet);

        Person p1 = new Person("fan");
        Person p2 = new Person("hehe");
        Person p3 = new Person("fan");
        Person p4 = new Person("axyz");
        //Person p5 = null;  //加到TreeSet中会报错,NPE(NullPointerException),因为往里放时会调用compareTo方法。

        Set<Person> personHashSet = new HashSet<Person>();
        Collections.addAll(personHashSet, p1, p2, p3, p4);
        System.out.println("personHashSet : " + personHashSet); //顺序不一定

        Set<Person> personLinkedHashSet = new LinkedHashSet<Person>();
        Collections.addAll(personLinkedHashSet, p1, p2, p3, p4);
        System.out.println("personLinkedHashSet : " + personLinkedHashSet);  //按照插入顺序

        Set<Person> personTreeSet = new TreeSet<Person>();
        Collections.addAll(personTreeSet, p1, p2, p3, p4);
        System.out.println("personTreeSet : " + personTreeSet);  //按照字母顺序
    }
}

执行结果如下所示:
这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值