java学习第十九章 集合之Set

2019-06-11  本文已影响0人  锋叔

Set是一个接口

  • 无序
  • 不重复
  • 实现类有HashSet TreeSet
HashSet
Set hs = new HashSet();
hs.add("1");
hs.add("2");
hs.add("abc");
hs.add("ab");
hs.add(123);
hs.add('a');
for(Object val : hs) {
    System.out.print(val + ",");
}
==> 打印结果:1,ab,a,2,abc,123,
hs.remove("abc");
System.out.println("\n==========删除后=============");
for(Object val : hs) {
    System.out.print(val + ",");
}
==> 打印结果:1,ab,a,2,123,
hs.remove('a');
hs.add('b');
System.out.println("\n==========模拟修改后=============");
for(Object val : hs) {
    System.out.print(val + ",");
}
==> 打印结果:1,ab,2,b,123,
System.out.println("\n==========查询=============");
boolean flag = hs.contains('b');
System.out.println("是否包含b: " + flag);
==> 打印结果:是否包含b: true
泛型
存储高级数据无法去重
Set hs3 = new HashSet();
        
Student s1 = new Student("s1", "101", 10);
Student s2 = new Student("s1", "101", 10);
Student s3 = new Student("s2", "102", 30);

hs3.add(s1);
hs3.add(s2);
hs3.add(s3);

for (Object a : hs3) {
    System.out.println(a);
}

==> 打印结果
* Student [name=s1, className=101, score=10.0]
* Student [name=s2, className=102, score=30.0]
* Student [name=s1, className=101, score=10.0]
public class Student {
    String name;
    String className;
    float score;
    public Student(String name, String className, float score) {
        super();
        this.name = name;
        this.className = className;
        this.score = score;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", className=" + className + ", score=" + score + "]";
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((className == null) ? 0 : className.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + Float.floatToIntBits(score);
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (className == null) {
            if (other.className != null)
                return false;
        } else if (!className.equals(other.className))
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        if (Float.floatToIntBits(score) != Float.floatToIntBits(other.score))
            return false;
        return true;
    }
    
}
TreeSet
字母
Set ts1 = new TreeSet();

ts1.add("5");
ts1.add("99");
ts1.add("-1");
ts1.add("0.77");
ts1.add("0");

for(Object a : ts1) {
    System.out.print(a  + ",");
}
数字
Set ts2 = new TreeSet();

ts2.add(5);
ts2.add(99);
ts2.add(-1);
ts2.add(77);
ts2.add(0); 

for(Object b : ts2) {
    System.out.print(b + ",");
}
自定义类 Person
class Person {
    String name;
    int age;
    /**
     * @param name
     * @param age
     */
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

TreeSet 添加自定义类

Person p1 = new Person("疯子", 18);
Person p2 = new Person("傻子", 98);

Set ts3 = new TreeSet();
ts3.add(p1);
ts3.add(p2);
        
for(Object person  :  ts3) {
    System.out.println(person);
}   
TreeSet添加对象使用Comparable接口
class PersonSet implements Comparable {
    String name;
    int age;
    /**
     * @param name
     * @param age
     */
    public PersonSet(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "PersonSet [name=" + name + ", age=" + age + "]";
    }
    @Override
    public int compareTo(Object o) {
        // TODO Auto-generated method stub
        return 0;
    }
}
PersonSet p1 = new PersonSet("疯子", 18);
PersonSet p2 = new PersonSet("傻子", 98);

Set ts3 = new TreeSet();
ts3.add(p1);
ts3.add(p2);
        
for(Object person  :  ts3) {
    System.out.println(person);
}
修改 PersonSet 的 compareTo 方法,手动进行比较。
class PersonSet implements Comparable {
    String name;
    int age;
    /**
     * @param name
     * @param age
     */
    public PersonSet(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "PersonSet [name=" + name + ", age=" + age + "]";
    }
    
    @Override
    public int compareTo(Object o) {
        // Object o 等于第二个对象
        PersonSet person2 = (PersonSet) o;
        int age1 = this.getAge(); // 第一个对象的age
        int age2 = person2.getAge(); // 第二个对象的age
        // 对比大小
        if (age1 > age2) {
            return 1;
        } else if (age1 == age2) {
            return 0;
        } else {
            return -1;
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读