泛型,数据结构,集合

文章目录

泛型

介绍

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

解决问题

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

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

好处

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

使用

通配符

? 表示任意类型

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

泛型的下限

指定泛型中的最小类型

<? super 最小类型>

泛型的上限

指定泛型中的最大类型

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

数据结构

定义

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

常见的数据结构

栈(先进后出)
队列(先进先出)
数组结构

定义 :数组在内存中是一块连续存储数据的空间
特点 :查询快,增删慢

ArrayList底层就是使用数组结构

链表结构

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

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

代表集合: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集合

特点

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

特有方法

子类及其底层数据结构

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

LinkedList集合

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

Set集合

特点

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

没有特有方法

方法都来自Collection集合

子类及其底层数据结构

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

LinkedHashSet集合

底层结构 :哈希表+链表结构

哈希表保证无重复元素

链表保证存取元素顺序有序

相关推荐
S***26752 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
马剑威(威哥爱编程)2 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
JIngJaneIL2 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
V***u4532 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿3 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t9193 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***08293 小时前
【监控】spring actuator源码速读
java·spring boot·spring
麦麦鸡腿堡3 小时前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
vx_dmxq2114 小时前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php
5***g2984 小时前
新手如何快速搭建一个Springboot项目
java·spring boot·后端