栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java数据结构:(集合——Set接口及其实现类)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java数据结构:(集合——Set接口及其实现类)

目录
  • HashSet
  • linkedHashSet
  • TreeSet


Set接口:
1、Set的实现类们:HashSet、TreeSet、linkedHashSet
2、Set系列的集合的元素是不能重复的。
HashSet和linkedHashSet:
①先比较hash值,如果hash值不一样,说明一定不相同,
②如果hash值一样,再调用equals方法比较
TreeSet:
按照元素的大小来决定是否相同元素。

3、Set接口没有增加方法,都是从Collection接口中继承的。

HashSet

元素无序

@Test
    public void test1(){//不可重复
        HashSet set = new HashSet();
        set.add("张三");
        set.add("张三");
        set.add("李四");
        System.out.println("不可重复"+set);//不可重复[李四, 张三]
    }
    @Test
    public void test4(){ //HashSet无序
        HashSet set = new HashSet();
        set.add("张三");
        set.add("李四");
        set.add("王五");
        set.add("王二");
        System.out.println("HashSet无序"+set);//HashSet无序[李四, 张三, 王五, 王二]
    }
linkedHashSet

元素顺序为添加顺序
linkedHashSet是HashSet的子类,比HashSet多维护了添加的顺序。
当想要实现集合的元素的不可重复性,又想要保证元素的添加顺序,就选择使用linkedHashSet。否则就用List系列或HashSet。
linkedHashSet干的事多了,效率低了。

@Test
    public void test1(){//不可重复
        linkedHashSet set= new linkedHashSet();
        set.add("张三");
        set.add("张三");
        set.add("李四");
        System.out.println("不可重复"+set);//不可重复[张三, 李四]
    }
    @Test
    public void test4(){ //linkedHashSet元素为添加顺序
        linkedHashSet set= new linkedHashSet();
        set.add("张三");
        set.add("李四");
        set.add("王五");
        set.add("王二");
        System.out.println("linkedHashSet添加顺序"+set);//linkedHashSet添加顺序[张三, 李四, 王五, 王二]
    }
TreeSet

元素顺序为大小顺序
当需要元素不可重复,又要给元素排大小时(对象的大小比较),就用TreeSet。
所以要用到TreeSet,一定要用java.lang.Comparable或java.util.Comparator。

 @Test
    public void test1(){//不可重复
        TreeSet set= new TreeSet();
        set.add("张三");
        set.add("张三");
        set.add("李四");
        System.out.println("不可重复"+set);//不可重复[张三, 李四]
    }
   @Test
    public void test9(){
        TreeSet set = new TreeSet();
        //这里因为Object类型没有实现了java.lang.Comparable接口,所以不可以添加到TreeSet中
        set.add(new Object());//出现异常
    }
    @Test
    public void test4(){ //TreeSet元素顺序为大小顺序
        TreeSet set= new TreeSet();
        //这里因为String类型实现了java.lang.Comparable接口,所以可以添加到TreeSet中
        set.add("B");
        set.add("A");
        set.add("C");
        set.add("Z");
        System.out.println("TreeSet添加顺序"+set);//TreeSet添加顺序[A, B, C, Z]
    }

具体使用:

 @Test
    public void test10(){
        //用匿名内部类实现了Comparator接口
        TreeSet set = new TreeSet(new Comparator(){
            @Override
            public int compare(Object o1, Object o2) {
                Student s1 = (Student) o1;
                Student s2 = (Student) o2;
                return s1.getId() - s2.getId();
            }});

        set.add(new Student(6,"张三"));
        set.add(new Student(1,"李四"));
        set.add(new Student(2,"王五"));
        System.out.println(set);//[Student [id=1, name=李四], Student [id=2, name=王五], Student [id=6, name=张三]]
    }

class Student{
    private int id;
    private String name;
    public Student(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/292949.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号