Java学习第十七天

Java学习第十七天知识点

Queue(I) - 队列
1.底层实现:基于数组或者链表实现
2.特点:

a.先进先出(后进后出)
b.队列也是线性结构,有顺序的,但是本身没有标号

3.常用API:

offer() - 向队列尾部追加元素
poll() - 向队列头部取出元素(出队列)
peek() - 向队列头部获取元素(队列不变)

4.Deque(I) - 可以作为双端队列/栈
1).底层实现:基于数组或者链表实现
2).特点:

	a.作为双端队列 - 先进先出
	  作为栈 - 先进后出
	b.只能通过方法区分是队列/栈

3).常用API:

	作为双端队列:
	   带有First()/Last()
	作为栈:
		push() - 压栈
		pop() - 弹栈

Set(I) - 和Collection中的API完全一致
1.特点:

a.Set集合截取Map(映射表)
b.Set集合的物理空间是不连续的,添加没有顺序(不是随机)
c.Set集合不允许有重复值,值是唯一的
d.使用equals()判断元素是否重复

2.实现类
1).HashSet©
(1).存储过程 -> 看图
在这里插入图片描述

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

(2)结论:
a. hashCode() 和 equals() 必须一起重写
b. equals() 判断两个相同的对象,hashCode()必须一致
c. equals判断两个不相等的对象, hashCode值尽量不等
d. 在同一个类中,基本可以忽略hashCode值尽量不等的情况.
代码:

package week5day01;

import java.util.HashSet;

public class Demo02Set {
    public static void main(String[] args) {
        HashSet<Student> set=new HashSet<>();
        set.add(new Student("第一个",18));
        set.add(new Student("第二个",21));
        set.add(new Student("第一个",18));
        set.add(new Student("第二个",21));
        System.out.println(set);

        System.out.println("----------------------");
        Student stu1=new Student("第一个",18);
        Student stu2=new Student("第二个",21);
        HashSet<Student> set1=new HashSet<>();
        set1.add(stu1);
        set1.add(stu2);
        System.out.println(set1);
        System.out.println(set1.size());
        //值修改后,删不掉。除非你改回来。(靠哈希code定位)
        // 因为是拿 "第一个",20 去比较,可是原来是18 ,但是20还在18的位置上,哈希值没变,所以20和18哈希值不一样,不能删
        //删除不掉三种情况(1、找不到 2、值不对 3、哈希值不对)
        //set1.remove(new Student("第一个",18) );
        stu1.setAge(20);
        set1.remove(new Student("第一个",20));
        System.out.println(set1);
        System.out.println(set1.size());

    }
}

2).TreeSet© - 二叉树
完全二叉树、满二叉树(除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。)…
主要掌握便利方式:
二叉树的遍历主要有三种:
(1)先(根)序遍历(根左右)

(2)中(根)序遍历(左根右)

(3)后(根)序遍历(左右根)
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值