集合的学习9:Set接口

22 篇文章 2 订阅

Set接口

set接口和常用方法

set接口基本介绍

1.无序:添加和取出的顺序不一样,没有索引

2.不允许重复元素,所以最多一个null

3.jdkAPI中set接口的实现类有:HashSet,TreeSet,等等

set接口的常用方法和接口

  1. 和list一样,set接口也是collection的子接口,因此,常用方法与collection接口一样

如:size():获取元素个数,isEmpty():判断是否为空,countains(object)查找元素是否存在,iterator()迭代器

add():添加元素,remove():删除元素,clear()清空,equales(object)比较

set接口的遍历方式

  • 同collection的遍历方式一样,因为set解救是collection接口的子接口

    1.可以使用迭代器,

    2.可以使用增强for循环

    3.注意:不能使用索引的方式来获取

  • 使用set接口的实现类HashSet,来理解set接口的方法

  • Set接口的实现类的对象(set接口对象),不能存放重复元素,可以存放一个null;

  • 存放对象是无序的,无序:添加的顺序,与取出的顺序不一致,

  • 注意:取出顺序虽然不一致,但是是固定的

set接口实现类——HashSet

  • HashSet实现了set接口
  • HashSet,实际是HashMap(重点)
//源码
public HashSet() {
        map = new HashMap<>();
    }
package com.JiHe_.Set_;

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

public class Demo01 {
    public static void main(String[] args) {

        //使用set接口的实现类HashSet,来理解set接口的方法
        //Set接口的实现类的对象(set接口对象),不能存放重复元素,可以存放一个null;
        //存放对象是无序的,无序:添加的顺序,与取出的顺序不一致,注意:取出顺序虽然不一致,但是是固定的
        HashSet hashSet = new HashSet();

        hashSet.add(15);
        hashSet.add(16);
        hashSet.add(17);
        hashSet.add(18);
        hashSet.add(null);
        hashSet.add(null);
        //输出
        System.out.println(hashSet);

        //遍历 
        Iterator iterator = hashSet.iterator();
        while (iterator.hasNext()) {

            System.out.println(iterator.next());
            
        }
    }
}
  • 查看是否添加成功
package com.JiHe_.Set_;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;

import java.util.HashSet;

public class Demo02 {

    public static void main(String[] args) {
        /*构造器走的源码
        *   public HashSet() {
        map = new HashMap<>();
    }
        * */
        //在执行add后会返回一个boolean值,成功返回true,失败则为false
        HashSet hashSet = new HashSet<>();
        System.out.println(hashSet.add("红楼"));//T
        System.out.println(hashSet.add("西游"));//T
        System.out.println(hashSet.add("水浒"));//T
        System.out.println(hashSet.add("三国"));//T
        System.out.println(hashSet.add("水浒"));//F
        System.out.println(hashSet.add(null));//T
        System.out.println(hashSet.add(null));//F
        System.out.println(hashSet.add("红楼"));//F

        System.out.println("set"+hashSet);
    }
}

HashSet理解

案例:

package com.JiHe_.Set_;

import java.util.HashSet;

public class Demo02 {

    public static void main(String[] args) {
        /*构造器走的源码
        *   public HashSet() {
        map = new HashMap<>();
    }
        * */
        //在执行add后会返回一个boolean值,成功返回true,失败则为false
        HashSet hashSet = new HashSet<>();
        System.out.println(hashSet.add("红楼"));//T
        System.out.println(hashSet.add("西游"));//T
        System.out.println(hashSet.add("水浒"));//T
        System.out.println(hashSet.add("三国"));//T
        System.out.println(hashSet.add("水浒"));//F
        System.out.println(hashSet.add(null));//T
        System.out.println(hashSet.add(null));//F
        System.out.println(hashSet.add("红楼"));//F

        System.out.println("set"+hashSet);//此时,集合内有五个元素
        
        hashSet = new HashSet();//相当于重新创建,此时集合内无元素
        System.out.println(hashSet);
        //hashset,不能存放相同的数据/对象!
        hashSet.add("lucy");
        hashSet.add("lucy");//加入不了
        //new了两个不同的对象,只是对象中的内容一样
        //内存地址不同,名字相同就好像世界上有两个名字相同但不是同一个人
        hashSet.add(new Dog("tom"));//成功
        hashSet.add(new Dog("tom"));//成功
        System.out.println(hashSet);

        hashSet = new HashSet();
        //加深,非常经典面试题
        //有坑,必须看源码,看看add发生了什么?=>底层机制
        //每次new String()都生成一个新的对象,只不过String类继承了Obejct类重写了hasCode() 不在是按照地址计算hash值,所以不同对象在这里hash值相同,才不能添加进去
        hashSet.add(new String("hsp"));//ok
        hashSet.add(new String("hsp"));//失败
        System.out.println(hashSet);
    }
}
class Dog{
    private String  name;

    public Dog(String name ) {
        this.name=name;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                '}';
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玥骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值