集合框架二(Set接口)

来源:互联网 发布:mac win10 printscreen 编辑:程序博客网 时间:2024/05/21 19:29

package us.google.com;

public class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]”;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}

}
package us.google.com;

public class Student {
private String name;

public Student(String name) {    super();    this.name = name;}private int age;public Student() {    super();    // TODO Auto-generated constructor stub}public String getName() {    return name;}public void setName(String name) {    this.name = name;}public int getAge() {    return age;}public void setAge(int age) {    this.age = age;}@Overridepublic String toString() {    return "Student [name=" + name + ", age=" + age + "]";}

}
package us.google.com;

public class Empl implements Comparable{
private String name;
private int age;

public Empl(String name, int age) {    super();    this.name = name;    this.age = age;}public Empl() {    super();    // TODO Auto-generated constructor stub}public String getName() {    return name;}public void setName(String name) {    this.name = name;}public int getAge() {    return age;}public void setAge(int age) {    this.age = age;}@Overridepublic String toString() {    return "Empl [name=" + name + ", age=" + age + "]";}@Overridepublic int compareTo(Empl o) {    if(o==null)    {        throw new NullPointerException("参数不能为空");    }    if (this.age>o.age) {        return 1;    }    if(this.age<o.age)    {        return -1;    }    return 0;}

}
package us.google.com;

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

/**
* Set接口
* 1、不允许重复元素
* @author chongrubujing
*
*/
public class SetDemo {
/**
* HashSet实现类
* 1、不保证迭代顺序
* 2、底层使用HashMap实现(哈希表)
* 3、自定义对象是否重复的判断条件是:先判断hashCode是否相等,如果hashCode不相等,那么一定不是同一个对象
* 如果hashCode相等,那么久需要equals方法进一步判断,如果equals返回true则为同一个对象。否则不是
* 同一个对象。
*/
public static void hashset()
{
//创建一个HashSet对象
Set set = new HashSet();
set.add(“空空”);
set.add(“兰兰”);
set.add(“爱爱”);
set.add(“苍苍”);
System.out.println(“元素的个数是:”+set.size());
//把集合转换成数组(匿名对象注意别忘了{})
String[] names = set.toArray(new String[]{});
for (String s: names) {
System.out.println(s);
}
System.out.println(“—————————”);
//存储自定义对象
//创建HashSet对象
Set persons = new HashSet();
persons.add(new Person(“空空”,18));
persons.add(new Person(“兰兰”,18));
persons.add(new Person(“爱爱”,18));
persons.add(new Person(“苍苍”,18));
persons.add(new Person(“空空”,30));
System.out.println(“元素一共有:”+persons.size());
}

/** * TreeSet实现类 * 1、使用元素的自然顺序对元素进行排序 * 2、底层使用TreeMap实现(树形结构) * 3、在TreeSet集合中,存储自定义对象时,该对象必须实现Comparable/Comparator接口 */public static void treeset(){    Set<String> set = new TreeSet<String>();    set.add("空空");    set.add("兰兰");    set.add("苍苍");    set.add("爱爱");    System.out.println("元素个数:"+set.size());    String[] names = set.toArray(new String[]{});    for (String s : names) {        System.out.println(s);    }    System.out.println("添加自定义对象");    Set<Empl> set1 = new TreeSet<Empl>();    set1.add(new Empl("空空",30));    set1.add(new Empl("兰兰",31));    set1.add(new Empl("苍苍",32));    set1.add(new Empl("爱爱",33));    set1.add(new Empl("利亚",28));    System.out.println("个数为:"+set1.size());}/** * LinkedHashSet类 * 1、使用哈希表+双向链表实现 * 2、会以插入的顺序输出 * 3、底层是使用LinkedHashMap实现 * 4、是HashSet的子类 */public static void linkedhashset(){    Set<Student> set2 = new LinkedHashSet<Student>();    Student s1  = new Student("小白");    Student s2  = new Student("小黑");    Student s3  = new Student("小红");    Student s4  = new Student("小蓝");    set2.add(s1);    set2.add(s2);    set2.add(s3);    set2.add(s4);    set2.add(new Student("小绿"));    System.out.println(set2);}public static void main(String[] args) {    hashset();    treeset();    linkedhashset();}

}

0 0
原创粉丝点击