泛型,数据结构,集合

文章目录

  • 泛型
      • 介绍
      • 解决问题
      • 好处
      • 使用
      • 通配符
        • 泛型的下限
        • 泛型的上限
  • 数据结构
      • 定义
      • 常见的数据结构
        • 栈(先进后出)
        • 队列(先进先出)
        • 数组结构
        • 链表结构
        • 哈希表结构
  • 集合
    • List集合
      • 特点
      • 特有方法
      • 子类及其底层数据结构
      • LinkedList集合
    • Set集合
      • 特点
      • 没有特有方法
      • 子类及其底层数据结构
      • LinkedHashSet集合

泛型

介绍

在Java语言中,是一种类型参数,可以设置存储数据的类型

解决问题

在创建对象时,明确了集合中所存储元素的类型(限定类型)

  • 泛型是使用在代码编写时期的技术方法(编译期技术)
  • 泛型在程序运行时,就会被擦除

好处

  1. 在编译时就对类型做判断,避免不必要的类型转换操作
    1. 元素类型->Object类型
  2. 精简代码,不用调用特有方法来转型,避免发生错误
    1. Object类型->需要的类型

使用

  • 泛型类
public class 类名<T>{}//当不确定类中的成员变量使用什么类型时,可以用泛型表示
public class 泛型类<T>{private T 变量;
}//在创建泛型类对象时,明确类型
泛型类<String> 对象 = new 泛型类<>();
//泛型类中成员变量的类型为:String
  • 泛型接口
public interface 接口名<A>{}//当不确定接口中某个方法参数使用什么类型,或者方法的返回值使用什么类型时,可以用泛型表示
public interface 泛型接口<A>{public void method(A a);
}//情况1:在子类编写时,指定接口上泛型的具体类型
public class 子类 implements 泛型接口<String>{public void method(String a){}
}//情况2:在子类编写时,没有指定接口上的泛型。意味着:子类也使用和接口相同的泛型(子类:泛型类)
public class 子类<A> implements 泛型接口<A>{public void method(A a){}
}
子类<String> 对象 = new 子类<>();
//创建子类对象时,明确了泛型的类型
  • 泛型方法(非泛型类)
修饰符 <泛型> 返回值类型 方法名(泛型 参数){//方法体
}//当前类没有声明泛型类,但该类中的方法参数或方法返回值不确定类型时:使用泛型方法
public <T> void method(T param){}
//当调用该方法时,向方法中传递参数的类型,就是泛型的类型

通配符

? 表示任意类型
通常在开发中,?是和泛型的上下限一起使用

泛型的下限

指定泛型中的最小类型
<? super 最小类型>

泛型的上限

指定泛型中的最大类型
<? extends 最大类型>
:集合中泛型不支持多态

数据结构

定义

是一个存储数据的排列方式

常见的数据结构

栈(先进后出)

Snipaste_2024-03-28_18-23-48.png

队列(先进先出)

Snipaste_2024-03-28_18-25-39.png

数组结构

定义:数组在内存中是一块连续存储数据的空间
特点:查询快,增删慢
ArrayList底层就是使用数组结构
Snipaste_2024-03-28_19-27-58.png

链表结构

在内存中是使用节点存储数据
节点:数据+地址
特点:有头有尾
分类

  • 单向链表:只能从头到尾
  • 双向链表:可以从头到尾,也可以从尾到头(提高查询效率)

Snipaste_2024-03-28_20-50-31.png
代表集合:LinkedList

哈希表结构

底层:使用大小为16的数组+链表组成的存储方式
存储数据的方式:就是根据对象的地址或者属性结合哈希算法算出int类型的哈希值 Object.hashCode()

  • 判断:计算出的存储位置上是否有元素存在
    • 没有元素存在,直接存储
    • 有元素存在 拿要存储的元素和已经存储的元素进行比较 Object.equals()
      • 相同:属于重复元素,不存储
      • 不相同:再次拿当前存储空间作为算法因子,进行哈希算法,计算新的存储空间;如何重复上述操作

哈希值的特点

  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,不同对象的哈希值有可能相同(比如:“abc”,“cba”,“bca”)

优化:从JDK1.8开始,使用数组+链表/红黑树(当链表的长度>8时,自动把链表转换为红黑树)

集合

体系划分

  • Collection(接口)
  • Map(接口)

java.util.Collection集合:是一个接口,无法实例化

  • java.util.List集合(接口)
    • 常用子类:ArrayList,LinkedList
  • java.util.Set集合(接口)
    • 常用子类:HashSet,LinkedHashSet,TreeSet

List集合

特点

  • 带有索引
  • 存储元素的顺序和获取元素的顺序一样(存取有序)
  • 可以存储重复元素

特有方法

Snipaste_2024-03-28_19-43-39.png

子类及其底层数据结构

  1. ArrayList:数组结构
  2. LinkedList:双向链表
  3. Vector:数组结构

LinkedList集合

底层结构:双向链表
双向链表:每个节点有三个部分的数据,一个是保存元素数据,一个是保存前一个节点的地址,还有一个是保存后一个节点的地址。查询效率比单向链表高。
特有方法
Snipaste_2024-03-28_19-50-32.png

Set集合

特点

  • 元素没有索引
  • 存取元素不保证顺序
  • 不能存储重复元素

没有特有方法

方法都来自Collection集合

子类及其底层数据结构

  • HashSet:哈希表结构
  • LinkedHsahSet:链表+哈希表结构
  • TreeSet:红黑树

LinkedHashSet集合

底层结构:哈希表+链表结构
哈希表保证无重复元素
链表保证存取元素顺序有序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/576352.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SPDZ基础使用手册(深度学习视角)

基本类型 深度学习中最常使用的便是秘密定点数sfix&#xff0c;有关定点数的高级运算协议请参阅Paper: Secure Computation With Fixed-Point Numbers. 容器类型 SPDZ的深度学习框架主要基于TensorFlow实现&#xff0c;其中使用的容器是张量Tensor&#xff0c;在库中的定义如下…

抓包神器大比拼:Thor、克魔助手和Http Catcher在iOS系统下的优缺点分析

引言 在苹果手机的iOS系统相对封闭的情况下&#xff0c;抓包工具并不是很常见。大多数人可能对这类工具并不熟悉&#xff0c;除了少数安全专家之外&#xff0c;一般用户很少会接触到这些工具。然而&#xff0c;在某些特定场景下&#xff0c;比如网络调试、安全测试等&#xff…

RTSP应用:实现视频流的实时推送

在实现实时视频流推送的项目中&#xff0c;RTSP&#xff08;Real Time Streaming Protocol&#xff09;协议扮演着核心角色。本文将指导你通过安装FFmpeg软件&#xff0c;下载并编译live555&#xff0c;以及配置ffmpeg进行视频流推送&#xff0c;来实现一个基本的RTSP流媒体服务…

WorkPlus AI助理实现私有化AI智能客服,助力企业满足客户需求

私有化AI智能客服的出现&#xff0c;以其卓越的性能和全面的功能&#xff0c;助力企业提升客户服务体验。WorkPlus AI助理作为一款领先的解决方案&#xff0c;可实现企业的私有化AI智能客服&#xff0c;提升客户服务的质量和效率。 私有化AI智能客服的价值和意义不言而喻。通过…

【机器学习】深入探讨基于实例的学习及K-最近邻算法

深入探讨基于实例的学习及K-最近邻算法 在机器学习的众多策略中&#xff0c;基于实例的学习方法因其简单性和高效性而备受关注。这种方法的核心理念在于利用已知的数据实例来预测新数据的标签或属性。本文将深入探讨其中的两个重要概念&#xff1a;最近邻算法和K-最近邻算法&a…

Untiy 布局控制器Aspect Ratio Fitter

Aspect Ratio Fitter是Unity中的一种布局控制器组件&#xff0c;用于根据指定的宽高比来调整包含它的UI元素的大小。实际开发中&#xff0c;它可以确保UI元素保持特定的宽高比&#xff0c;无论UI元素的内容或父容器的大小如何变化。 如图为Aspect Ratio Fitter组件的基本属性&…

文档翻译-NVIDIA DALI Getting Started

概述 NVIDIA数据加载库&#xff08;DALI&#xff09;是一个高度优化的构建模块集合和执行引擎&#xff0c;用于加速计算机视觉和音频深度学习应用的数据管道。 由深度学习框架提供的输入和增强管道通常可以分为以下两类&#xff1a; 快速但不灵活 - 以C编写&#xff0c;它们…

中彩票.Java

题目&#xff1a;投注号码由6个红球&#xff0c;1个蓝球组成&#xff0c;红色球从1~33&#xff08;每个数字只有一个&#xff0c;不能重复&#xff0c;不能超出范围&#xff09;中选择&#xff1b;蓝色球从1~16中选择&#xff0c;红蓝球数字互不干扰 分析&#xff1a;系统随机…

CSS实现小车旅行动画实现

小车旅行动画实现 效果展示 CSS 知识点 灵活使用 background 属性下的 repeating-linear-gradient 实现路面效果灵活运用 animation 属性与 transform 实现小车和其他元素的动画效果 动画场景分析 从效果图可以看出需要实现此动画的话&#xff0c;需要position属性控制元素…

水壶配对问题的算法设计与分析

水壶配对问题的算法设计与分析 一、问题背景与基本设定二、确定性算法设计&#xff08;θ(n)次比较&#xff09;三、算法比较次数的下界证明&#xff08;Ω(nlgn)&#xff09;四、确定性算法&#xff08;θ(n)&#xff09;伪代码五、确定性算法C代码示例六、随机算法设计&#…

抖音视频关键词无水印下载软件|手机网页视频批量提取工具

全新视频关键词无水印下载软件&#xff0c;助您快速获取所需视频&#xff01; 随着时代的发展&#xff0c;视频内容已成为人们获取信息和娱乐的重要途径。为了方便用户获取所需视频&#xff0c;推出了一款功能强大的视频关键词无水印下载软件。该软件主要功能包括关键词批量提取…

手把手教你30行代码爬取《某某某报》

一、项目简介 大家好&#xff0c;这个爬虫项目是自己开发用来阅览报纸的&#xff0c;大概已经用了5年了&#xff0c;很稳定。看到社区爬虫征集令&#xff0c;就来献丑了。 1.思路介绍 1.爬《某某某报》官网&#xff0c;获取指定日期报纸pdf2.合并爬取的每片pdf,并进行合并3.…