java学习-----泛型、链表和二叉树

本文介绍了Java中的泛型,包括泛型类、泛型接口、泛型方法和泛型限制,强调了泛型提高代码复用率和类型安全性的优点。接着讲解了链表的概念,比较了链表与数组的优缺点,并详细阐述了单链表、双向链表和循环链表。最后,文章探讨了二叉树的定义、类型和遍历方式,包括斜树、满二叉树和完全二叉树的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

泛型

概述
泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

泛型类

public class ClassName<T>{ 
	private T data; 
	public T getData() { 
		return data; 
	}
	public void setData(T data) { 
		this.data = data; 
	} 
}

泛型接口

public interface IntercaceName<T>{ 
	T getData(); 
}

实现接口时,可以选择指定泛型类型,也可以选择不指定, 如下:

指定类型:

public class Interface1 implements IntercaceName<String> { 
	private String text; 
	@Override 
	public String getData() { 
	return text; 
	} 
} 

不指定类型:

public class Interface1<T> implements IntercaceName<T> { 
	private T data; 
	@Override 
	public T getData() { 
		return data; 
	} 
}

泛型方法
private static T 方法名(T a, T b) {}

泛型限制类型

  1. 在使用泛型时, 可以指定泛型的限定区域
  • 例如: 必须是某某类的子类或某某接口的实现类,格式:
    <T extends 类或接口1 & 接口2>

泛型中的通配符 ?
类型通配符是使用 ?代替方法具体的类型实参。
1: <? extends Parent> 指定了泛型类型的上届
2 :<? super Child> 指定了泛型类型的下届
3 :<?> 指定了没有限制的泛型类型

作用
1、 提高代码复用率
2、 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)

注意:
1、在编译之后程序会采取去泛型化的措施。也就是说Java中的泛型,只在编译阶段有效。
2、在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。


链表

什么是链表?
链表 [Linked List]:链表是由一组不必相连(不必相连:可以连续也可以不连续)的内
存结构(节点),按特定的顺序链接在一起的抽象数据类型。

补充:
1、内存结构:内存中的结构,如:struct、特殊内存块…等等之类;
2、抽象数据类型(Abstract Data Type [ADT]):表示数学中抽象出来的一些操作的集合。

数组和链表的区别和优缺点:
1、数组是一种连续存储线性结构,元素类型相同,长度固定的存储数据的方式。

数组的优点

  • 存取速度快

数组的缺点

  • 事先必须知道数组的长度;
  • 插入删除元素很慢 ;
  • 空间通常是有限制的 ;
  • 需要大块连续的内存块 ;
  • 插入删除元素的效率很低。

2、链表是离散存储线性结构

n 个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一
个后续节点,首节点没有前驱节点,尾节点没有后续节点。

链表优点

  • 空间没有限制 ;
  • 插入删除元素很快

链表缺点

  • 存取速度很慢

链表共分几类?
链表常用的有 3 类: 单链表、双向链表、循环链表。
链表的核心操作集有 3 种:插入、删除、查找(遍历)。

单链表 [Linked List]:由各个内存结构通过一个 Next 指针链接在一起组成,每一个内
存结构都存在后继内存结构(链尾除外),内存结构由数据域和 Next 指针域组成。

双向链表 [Double Linked List]:由各个内存结构通过指针 Next 和指针 Prev 链接在一
起组成,每一个内存结构都存在前驱内存结构和后继内存结构(链头没有前驱,链尾没有后
继),内存结构由数据域、Prev 指针域和 Next 指针域组成。

循环链表
(1)单向循环链表 [Circular Linked List] : 由各个内存结构通过一个指针 Next 链接在一起
组成,每一个内存结构都存在后继内存结构,内存结构由数据域和 Next 指针域组成。
(2)双向循环链表 [Double Circular Linked List] : 由各个内存结构通过指针 Next 和指针
Prev 链接在一起组成,每一个内存结构都存在前驱内存结构和后继内存结构,内存结构由
数据域、Prev 指针域和 Next 指针域组成。

在这里插入图片描述


二叉树

什么是二叉树?
二叉树是树的一种,每个节点最多可具有两个子树,即结点的度最大为 2(结点度:结点拥
有的子树数)。
在这里插入图片描述

二叉树就是每个节点不能多于有两个儿子,上面的图就是一颗二叉树,而且还是一种特殊的
二叉树:二叉查找树(binary search tree)。
定义:当前根节点的左边全部比根节点小,当前根节点的右边全部比根节点大。
可以看出,这对我们来找一个数是非常方便快捷的。
一棵树至少会有一个节点(根节点)

二叉树的种类
1、 斜树
所有结点都只有左子树,或者右子树。
在这里插入图片描述

2 、满二叉树
所有的分支节点都具有左右节点。
满二叉树
3、 完全二叉树
若设二叉树的深度为 h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h
层所有的结点都连续集中在最左边,这就是完全二叉树。
在这里插入图片描述

二叉树的一些性质

  1. 二叉树第 i 层上的结点数目最多为 2^(i-1) (i≥1)
  2. 深度为 h 的二叉树至多有 2^h-1 个结点(h≥1)
  3. 包含 n个结点的二叉树的高度至少为 log2 (n+1)
  4. 在任意一棵二叉树中,若终端结点的个数为 n0,度为 2 的结点数为 n2,则
    n0=n2+1

二叉树的遍历方式

二叉树的遍历方式,一般分为先序遍历,中序遍历,后序遍历。

在这里插入图片描述

  1. 先序遍历: 先访问根节点,然后访问左节点,最后访问右节点(根->左->右)
    (根-左-右):1-2-4-8-9-5-10-3-6-7
  2. 中序遍历: 先访问左节点,然后访问根节点,最后访问右节点(左->根->右)
    (左-根-右):8-4-9-2-10-5-1-6-3-7
  3. 后序遍历: 先访问左节点,然后访问右节点,最后访问根节点(左->右->根)
    (左-右-根):8-9-4-10-5-2-6-7-3-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值