集合框架之Set接口

  • Set(无序无下标元素不可重复):HashSet(重点)、TreeSet

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

复制代码
package com.oop.demo11;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * 测试set接口的使用
 */
public class Demo07 {
    public static void main(String[] args) {
        //创建集合
        Set<String> set=new HashSet<>();
        //1.添加数据
        set.add("苹果");
        set.add("华为");
        set.add("小米");
        System.out.println("数据个数:"+set.size());
        System.out.println(set.toString());
        System.out.println("=================");
        //2.删除元素
        set.remove("小米");
        System.out.println(set.toString());
        System.out.println("=================");
        //3.遍历(重点)
        //3.1增强for
        System.out.println("========增强for=======");
        for (String string:set
             ) {
            System.out.println(string);
        }
        //3.2使用迭代器
        System.out.println("========使用迭代器=======");
        Iterator<String> it = set.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
        //判断
        System.out.println("========判断=======");
        System.out.println(set.contains("华为"));
        System.out.println(set.isEmpty());

    }
}
复制代码

 

HashSet(重点):

  • 基于HashCode计算元素存放位置,如果此位置为空,则直接保存,如果不为空执行第二步
  • 调用equals进行确认,如果结果为true,则拒绝后者加入,否则,形成链表
复制代码
package com.oop.demo11;

import java.util.HashSet;
import java.util.Iterator;

/**
 * HashSet集合的使用
 * 存储结构:哈希表(数组+链表+红黑树)
 */
public class Demo08 {
    public static void main(String[] args) {
        //创建集合
        HashSet<String> hashSet=new HashSet<String>();
        //1.添加元素
        hashSet.add("aaa");
        hashSet.add("bbb");
        hashSet.add("ccc");
        hashSet.add("ddd");
        System.out.println("元素个数:"+hashSet.size());
        System.out.println(hashSet.toString());
        System.out.println("============");
        //2.删除元素
        hashSet.remove("aaa");
        System.out.println("删除之后:"+hashSet.size());
        System.out.println(hashSet.toString());
        System.out.println("====增强for===");
        //3.遍历操作
        //3.1增强for
        for (String string:hashSet
             ) {
            System.out.println(string);
        }
        System.out.println("====迭代器===");
        Iterator<String> it=hashSet.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
        System.out.println("====判断===");
        System.out.println(hashSet.contains("bbb"));
        System.out.println(hashSet.isEmpty());
    }


}
复制代码

 

TreeSet:

  • 基于排列顺序实现元素不重复

  • 实现了SortedSet接口,对集合元素自动排序

  • 元素对象的类型必须实现Comparable接口,指定排序规则

  • 通过ComparableTo方法确定是否为重复元素

 
复制代码
package com.oop.demo11;

import java.util.Iterator;
import java.util.TreeSet;

/**
 * TreeSet的使用
 * 存储结构:红黑树
 */
public class Demo09 {
    public static void main(String[] args) {
        //创建集合
        TreeSet<String> treeSet=new TreeSet<>();
        //1.添加元素
        treeSet.add("aaa");
        treeSet.add("bbb");
        treeSet.add("ccc");
        treeSet.add("ddd");
        System.out.println("元素个数:"+treeSet.size());
        System.out.println(treeSet.toString());
        System.out.println("=================");
        //2.删除元素
        treeSet.remove("aaa");
        System.out.println("删除之后:"+treeSet.size());
        System.out.println(treeSet.toString());
        System.out.println("=======增强for遍历========");
        //3.1增强for遍历
        for (String string:treeSet
             ) {
            System.out.println(string);
        }
        System.out.println("=======迭代器遍历========");
        //3.2迭代器遍历
        Iterator<String> it=treeSet.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
        System.out.println("=======判断========");
        //4.判断
        System.out.println(treeSet.contains("bbb"));
        System.out.println(treeSet.isEmpty());

    }
}
复制代码

 

复制代码
package com.oop.demo11;

import com.oop.demo11.Student;

import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;

/**
 * 使用TreeSet保存数据
 * 存储结构:红黑树
 * 要求:元素必须实现Comparable接口
 */
public class Demo10 {
    public static void main(String[] args) {
        //创建集合
        TreeSet<Student> students=new TreeSet<>();
        //1.添加元素
        Student s1 = new Student("刘德华",20);
        Student s2 = new Student("郭富城",22);
        Student s3 = new Student("梁朝伟",18);

        students.add(s1);
        students.add(s2);
        students.add(s3);
        System.out.println("元素个数"+students.size());
        System.out.println(students.toString());
        System.out.println("============");
        //2.删除元素
        students.remove(s1);
        System.out.println(students.size());
        System.out.println("============");
        //3.遍历元素
        //3.1增强for
        System.out.println("=====增强for=====");
        for (Student student:students
             ) {
            System.out.println(student.toString());
        }
        System.out.println("=====迭代器=====");
        Iterator it=students.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
        System.out.println("=====判断=====");
        System.out.println(students.contains(s2));
        System.out.println(students.isEmpty());
    }
}

package com.oop.demo11;

import java.util.Objects;

public class Student implements Comparable<Student> {
private String name;
private int age;

public Student(String name, int age) {
this.name = name;
this.age = age;
}

@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}

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 boolean equals(Object obj) {
//1.判断是不是同一个对象
if (this == obj)
return true;
//2.判断是否为空
if (obj == null)
return false;
//3.判断是否是Student类型
if (obj instanceof Student) {
Student s = (Student) obj;
//4.比较属性
if (this.name.equals(s.getName()) && this.age == s.getAge()) {
return true;
}
}
//5.不满足条件
return false;

}

@Override
public int compareTo(Student o) {
int n1=this.getName().compareTo(o.getName());
int n2=this.age-o.getAge();
return n1==0?n2:n1;
}
}

复制代码

 

复制代码
package com.oop.demo11;

import com.oop.demo11.Student;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * TreeSet集合的使用
 * Comparator:实现定制比较
 * Comparable:可比较的
 */
public class Demo11 {
    public static void main(String[] args) {
        //创建集合,并指定比较规则
        TreeSet<Student> students=new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                int n1=o1.getAge()-o2.getAge();
                int n2=o1.getName().compareTo(o2.getName());
                return n1==0?n2:n1;
            }
        });
        Student s1 = new Student("liu德华",20);
        Student s2 = new Student("guo富城",22);
        Student s3 = new Student("liang朝伟",18);
        Student s4 = new Student("zhang学友",18);

        students.add(s1);
        students.add(s2);
        students.add(s3);
        students.add(s4);
        System.out.println(students.toString());
    }
}


package com.oop.demo11;

import java.util.Objects;

public class Student implements Comparable<Student> {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}'+"\n";
    }

        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 boolean equals(Object obj) {
        //1.判断是不是同一个对象
        if (this == obj)
            return true;
        //2.判断是否为空
        if (obj == null)
            return false;
        //3.判断是否是Student类型
        if (obj instanceof Student) {
            Student s = (Student) obj;
            //4.比较属性
            if (this.name.equals(s.getName()) && this.age == s.getAge()) {
                return true;
            }
        }
        //5.不满足条件
        return false;

    }

    @Override
    public int compareTo(Student o) {
        int n1=this.getName().compareTo(o.getName());
        int n2=this.age-o.getAge();
        return n1==0?n2:n1;
    }
}
复制代码

 

posted @   胖虎9  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示