关于Queue接口、Set接口中HashSet实现类的课程笔记

Queue(I) --队列

1.底层实现:基于数组或者链表实现

2.特点:

​ a.先进先出

​ b.队列也是线性结构,有顺序的,但本身没有标号

3.常用API:

//添加方法  --向队列尾部添加元素
queue.offer("张三");
queue.offer("李四");
queue.offer("王五");
System.out.println(queue);//[张三, 李四, 王五]

//poll出列  --向队列头部取出元素    队列改变
String poll = queue.poll();
System.out.println(poll);//张三
System.out.println(queue);//[李四, 王五]

//peek出列    --向队列头部获取元素   队列不变
String peek = queue.peek();
System.out.println(peek);//李四
System.out.println(queue);//[李四, 王五]

4.Deque(I) -可以作为双端队列/栈

a.底层实现:基于数组或者链表实现

b.特点:

​ 作为双端队列 --先进后出

​ 作为栈 --先进后出

​ 只能通过方法区分是队列/栈

LinkedList
//作为list的实现类使用   --queue.add
//作为Queue实现类使用  --入队offer  查看peek    出列poll
		作为双端队列带有first()/last()
//作为栈实现      --压栈push   出栈pop   查看peek

Set(I)

–和Collection中的API完全一致

1.特点:

a.Set集合截取Map(映射表)

b.Set集合的物理空间是不连续的,添加没有顺序(不是随机)

c.Set集合不允许有重复值,值是唯一的

d.使用equals()判断元素是否重复

Set<String> set = new HashSet<>();
//往集合中追加数据
set.add("张三");
set.add("李四");
set.add("王五");
System.out.println(set);//[李四, 张三, 王五]
//插入是无序的,无序指的不是随机
//set是不允许重复的
//set 无序且唯一

2.实现类:

​ ①HashSet(C) --散列表(Hash表)

​ (1)存储过程 --看图

​ a.调用自身的hashCode()计算存储位置
b.如果该位置上没有元素,则直接存入
c.如果该位置上有元素,则调用equals()和该位置上所有元素进行比较
d.如果相同,则不存入
e.如果不相同,则存入该链表的末尾

在这里插入图片描述

  (2)结论:
  	a. hashCode() 和 equals() 必须一起重写
  	b. equals() 判断两个相同的对象,hashCode()必须一致
  	c. equals判断两个不相等的对象, hashCode值尽量不等
  	d. 在同一个类中,基本可以忽略hashCode值尽量不等的情况
/*
        自定义类作为泛型
        没有重写hashcode()和equals()   插入4个元素
        重写hashcode() 没有重写equals()   插入4个元素
        重写equals() 没有重写hashcode()   插入4个元素
        重写hashcode()和equals()   插入2个元素
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值