java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE, JavaME, JavaSE)的总称。本站提供基于Java框架struts,spring,hibernate等的桌面应用、web交互及移动终端的开发技巧与资料

保持永久学习的心态,将成就一个优秀的你,来 继续搞起java知识。

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

Person.java

1package 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 <a href="http://www.cfei.net/archives/tag/compareto" title="浏览关于“compareTo”的文章" target="_blank" class="tag_link">compareTo</a>(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

1package 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);  //按照字母顺序
    }
}

执行结果如下所示:
关于set想说的(二)之Set Demo-飞网
javasetDemohashCodecompareTo

因为水平有限,难免有疏忽或者不准确的地方,希望大家能够直接指出来,我会及时改正。一切为了知识的分享。

后续会有更多的精彩的内容分享给大家。