首页 > 其他分享 >Set

Set

时间:2023-03-15 10:24:05浏览次数:29  
标签:int Set Students stu add new public

Set

特点:无序,无下标,元素不可重复。

方法:全部继承Collection中的方法

package com.zhang.oop.Coll;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Demo05 {
    public static void main(String[] args) {
        Set<String> set = new HashSet<String>();
        //添加信息
        set.add("小米");
        set.add("苹果");
        set.add("华为");
        //删除信息
        set.remove("苹果");
        System.out.println(set);
        //增强for循环遍历
        for (String s : set) {
            System.out.println(s);
        }
        //迭代器遍历
        Iterator<String> it = set.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
    }
}

HashSet

添加字符串用法和上面一样。

package com.zhang.oop.Coll;
import java.util.HashSet;
public class Demo06 {
    public static void main(String[] args) {
        HashSet<Students> stu = new HashSet<>();
        Students s1 = new Students("张三",22);
        Students s2 = new Students("李四",33);
        Students s3 = new Students("王五",43);
        stu.add(s1);
        stu.add(s2);
        stu.add(s3);
        stu.add(new Students("张三",22));  //添加重复信息的时候会添加上,所以要重写equals方法和HashCode方法。重写:                                                                                                  Alt+Insert
        System.out.println(stu);
    }
}

存储结构:哈希表(数组+链表+红黑树)

存储过程(重复依据):根据HashCode计算保存位置,如果此位置为空,则直接保存,否则执行equals方法,如果equals方法为true,则认为是重复,否则形成链表。

TreeSet

存储结构:红黑树

  1. 基于排列顺序实现元素不重复
  2. 实现了SortSet接口,对集合元素自动排序
  3. 元素对象的类型必须实现Comparable接口,指定排序规则
  4. 通过Comparable方法确定是否为重复元素
//方法使用和上面一样,但是要写CompareTo方法
public class Students implements Comparable<Students>{
     @Override
    public int compareTo(Students s) {
        int n1 = this.getName().compareTo(s.getName());
        int n2 = this.age-s.getAge();
        return n1==0?n2:n1;
    }
}

comparator接口:实现定制比较(比较器)

package com.zhang.oop.Coll;
import java.util.Comparator;
import java.util.TreeSet;
public class Demo07 {
    public static void main(String[] args) {
        TreeSet<Students> stu = new TreeSet<>(new Comparator<Students>() { //重点
            @Override
            public int compare(Students o1, Students o2) {
                int n1 = o1.getAge()-o2.getAge();
                int n2 = o1.getName().compareTo(o2.getName());
                return n1==0?n2:n1;
            }
        });
        Students s1 = new Students("张三", 22);
        Students s2 = new Students("李四", 33);
        Students s3 = new Students("王五", 43);
        stu.add(s1);
        stu.add(s2);
        stu.add(s3);
        stu.add(new Students("张三", 22));
        System.out.println(stu);
    }
}

TreeSet案例

package com.zhang.oop.Coll;
import java.util.Comparator;
import java.util.TreeSet;
public class Demo08 {
    public static void main(String[] args) {
        TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int n1 = o1.length()-o2.length();
                int n2 = o1.compareTo(o2);
                return n1==0?n2:n1;
            }
        });
        treeSet.add("shanxi");
        treeSet.add("xian");
        treeSet.add("cat");
        treeSet.add("dog");
        System.out.println(treeSet);
    }
}

标签:int,Set,Students,stu,add,new,public
From: https://www.cnblogs.com/rockz/p/17217532.html

相关文章