> 文档中心 > 【Java】Set接口和常用方法(HashSet与TreeSet实例演示)

【Java】Set接口和常用方法(HashSet与TreeSet实例演示)

目录

  • 1.Set接口基本介绍
    • 1.Set接口的常用方法
    • 2.Set接口的遍历方式
    • 3.Set方法
  • 2.HashSet
    • HashSet数组链表模拟
      • debug

1.Set接口基本介绍

1.无序(添加和取出的顺序不一致),没有索引。
2.不允许重复元素,所以最多包含一个null。
3.Set接口的实现类有HashSet,TreeSet。

1.Set接口的常用方法

和List接口一样,Set接口也是Collection的子接口,常用方法和Collection接口一样。

2.Set接口的遍历方式

Set接口是Collection的子接口,遍历方式和Collection接口一样。

1.使用迭代器
2.增强for。
3.但不能使用索引的方式来获取。

。。。

/遍历 //方式1: 使用迭代器 System.out.println("=====使用迭代器===="); Iterator iterator = set.iterator(); while (iterator.hasNext()) {     Object obj =  iterator.next();     System.out.println("obj=" + obj); } set.remove(null); //方式2: 增强for System.out.println("=====增强for===="); for (Object o : set) {     System.out.println("o=" + o); }

【Java】Set接口和常用方法(HashSet与TreeSet实例演示)

3.Set方法

  1. 以Set 接口的实现类 HashSet 来讲解Set 接口的方法
    2. set 接口的实现类的对象(Set接口对象), 不能存放重复的元素, 可以添加一个null
    3. set 接口对象存放数据是无序(即添加的顺序和取出的顺序不一致)
    4. 注意:取出的顺序的顺序虽然不是添加的顺序,但是他的固定
import java.util.HashSet; import java.util.Iterator; import java.util.Set;/**  * @author Demo龙  * @version 1.0  */ @SuppressWarnings({"all"}) public class SetMethod {    public static void main(String[] args) { //1. 以Set 接口的实现类 HashSet 来讲解Set 接口的方法 //2. set 接口的实现类的对象(Set接口对象), 不能存放重复的元素, 可以添加一个null //3. set 接口对象存放数据是无序(即添加的顺序和取出的顺序不一致) //4. 注意:取出的顺序的顺序虽然不是添加的顺序,但是他的固定. Set set = new HashSet(); set.add("john"); set.add("lucy"); set.add("john");//重复 set.add("jack"); set.add("hsp"); set.add("mary"); set.add(null);// set.add(null);//再次添加null for(int i = 0; i <10;i ++) {     System.out.println("set=" + set); } //遍历 //方式1: 使用迭代器 System.out.println("=====使用迭代器===="); Iterator iterator = set.iterator(); while (iterator.hasNext()) {     Object obj =  iterator.next();     System.out.println("obj=" + obj); } set.remove(null); //方式2: 增强for System.out.println("=====增强for===="); for (Object o : set) {     System.out.println("o=" + o); } //set 接口对象,不能通过索引来获取    } }

测试结果
【Java】Set接口和常用方法(HashSet与TreeSet实例演示)

2.HashSet

//1. 在执行add方法后,会返回一个boolean值
//2. 如果添加成功,返回 true, 否则返回false
//3. 可以通过 remove 指定删除哪个对象
//1. 构造器走的源码

 public HashSet() {     map = new HashMap<>(); }
     2. HashSet 可以存放null ,但是只能有一个null,即元素不能重复
import java.util.HashSet;import java.util.Set;/** * @author 韩顺平 * @version 1.0 */@SuppressWarnings({"all"})public class HashSet_ {    public static void main(String[] args) { //老韩解读 //1. 构造器走的源码 /*     public HashSet() {  map = new HashMap();     }  2. HashSet 可以存放null ,但是只能有一个null,即元素不能重复  */ Set hashSet = new HashSet(); hashSet.add(null); hashSet.add(null); System.out.println("hashSet=" + hashSet);    }}
import java.util.HashSet;/** * @author Demo龙 * @version 1.0 */@SuppressWarnings({"all"})public class HashSet01 {    public static void main(String[] args) { HashSet set = new HashSet(); //说明 //1. 在执行add方法后,会返回一个boolean值 //2. 如果添加成功,返回 true, 否则返回false //3. 可以通过 remove 指定删除哪个对象 System.out.println(set.add("john"));//T System.out.println(set.add("lucy"));//T System.out.println(set.add("john"));//F System.out.println(set.add("jack"));//T System.out.println(set.add("Rose"));//T set.remove("john"); System.out.println("set=" + set);//3个 // set  = new HashSet(); System.out.println("set=" + set);//0 //4 Hashset 不能添加相同的元素/数据? set.add("lucy");//添加成功 set.add("lucy");//加入不了 set.add(new Dog("tom"));//OK set.add(new Dog("tom"));//Ok System.out.println("set=" + set);  set.add(new String("hsp"));//ok set.add(new String("hsp"));//加入不了. System.out.println("set=" + set);    }}class Dog { //定义了Dog类    private String name;    public Dog(String name) { this.name = name;    }    @Override    public String toString() { return "Dog{" +  "name='" + name + '\'' +  '}';    }}

【Java】Set接口和常用方法(HashSet与TreeSet实例演示)

HashSet数组链表模拟

/** * @author Demo龙 * @version 1.0 */@SuppressWarnings({"all"})public class HashSetStructure {    public static void main(String[] args) { //模拟一个HashSet的底层 (HashMap 的底层结构) //1. 创建一个数组,数组的类型是 Node[] //2. 有些人,直接把 Node[] 数组称为 表 Node[] table = new Node[16]; //3. 创建结点 Node john = new Node("john", null); table[2] = john; Node jack = new Node("jack", null); john.next = jack;// 将jack 结点挂载到john Node rose = new Node("Rose", null); jack.next = rose;// 将rose 结点挂载到jack Node lucy = new Node("lucy", null); table[3] = lucy; // 把lucy 放到 table表的索引为3的位置. System.out.println("table=" + table);    }}class Node { //结点, 存储数据, 可以指向下一个结点,从而形成链表    Object item; //存放数据    Node next; // 指向下一个结点    public Node(Object item, Node next) { this.item = item; this.next = next;    }}

debug

1.设置断点
【Java】Set接口和常用方法(HashSet与TreeSet实例演示)
【Java】Set接口和常用方法(HashSet与TreeSet实例演示)
【Java】Set接口和常用方法(HashSet与TreeSet实例演示)
【Java】Set接口和常用方法(HashSet与TreeSet实例演示)

安全期查询