根据线性表的实际存储方式,分为两种实现模型:

顺序表 ,将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示。

链表 ,将元素存放在通过链接构造起来的一系列存储块中。

一、顺序表

在Java中,顺序表的结构主要有:数组、ArrayList

ArrayList 的 本质是对 数组Object[ ] 的封装,将该数组作为它的一个属性。元素存储在 数组中

CRUD

对 ArrayList 的操作,实际上也是,用数组工具类---Arrays 来封装数组的CRUD以及排序等操作方法

查找、修改操作,可快速找到相关节点,时间复杂度上位 O(1)

插入、删除操作,需要增加 额外的 相关操作(即,将后续元素的进行前移 or 后移)

排序:

在 JDK 中对数组的操作主要是 Arrays 类。其中 Arrays.sort() 有多种重载方式。在对整型(int) 进行排序时,主要使用到了 插入排序、快速排序、归并排序

当 数列长度 小于 47 时,使用插入排序

当 数列长度 大于等于 47 且 小于286时,使用 快速排序

当 数列长度 大于 286 时,

数列具备结构 -- 使用 归并排序

不具备结构 --- 使用 快速排序

二、链表

链表 中主要由 节点 组成,每个 节点 都存储元素 以及其他节点的地址(如:前后节点的地址)。

CRUD

链表 的 CRUD 操作都要从头遍历到 指定的索引处(因为链表的存储不是连续的,所以时间复杂为 O(n) )。对节点的插入、删除操作,并不需要对后续的元素调整位置,只是修改相关节点指向其他节点的指针。

排序

一般链表的排序思路:(如:LinkedList)

建立一个新的数组,将 链表 中的元素 复制到 数组;

对 数组 进行排序;

将排序后的 数组 再复制回 原来的 链表中。(即,对链表 进行 set 操作)

1、单向链表

在 Java 中,单向链表 的数据结构 主要有:HashMap

HashMap 由 数组 + 单向链表(or 红黑树) 组成,HashMap的 Entry实体类(存储键值对的实体) 组成单向链表

2、双向链表

在 Java 中,双向链表 的数据结构 主要有:LinkedList、LinkedHashMap

LinkedList 用内部类--Node来作为节点。

LinkedList 有 first 和 last 属性,所以在 LinkedList 的头尾操作时,时间复杂度为O(1);

3、单向循环链表

链表的最后一个节点指向链表的 头节点。举例:略!

4、双向循环列表

在 Java 中,单向链表 的数据结构 主要有:LinkedHashMap

LinkedHashMap 中

有 数据+单向链表(红黑树) 结构,用于存储 键值对 元素

同时也 双向循环链表 结构,用于维护 键值对 的 插入顺序 or 访问顺序 ,达到该 Map 有序效果。

三、栈

栈 -- 先进后出

栈的实现: 栈可以用顺序表实现,也可以用链表实现。

四、队列

单向队列 -- 先进先出。双向队列 -- 可从两端进,两端出

队列的实现(同栈一样): 栈可以用顺序表实现,也可以用链表实现。

五、堆

六、树

Java中的内存划分

1、栈

栈(Stack):存放的都是方法的 局部变量。方法的运行一定要在栈中运行。

局部变量:方法的参数,或是方法 大括号{ } 内部的变量

作用域:一旦超出 作用域,立刻从 栈内存 当中弹出

2、堆

堆(Heap):凡是 new 出来的东西,都在 堆 当中。(如果是在方法内定义的引用类型的局部变量,该引用类型的对象 是在堆中,该对象的变量名 是 在栈中,且变量名存储的是 对象地址 -- 该对象在堆中的地址)

堆内存里面的东西都有一个地址值:16进制

堆内存里的数据,都有默认值。规则:

整数 -- 默认为 0

浮点数 -- 默认为 0.0

字符 -- 默认为 ‘\u0000’

布尔 -- 默认为 false

引用类型 -- 默认为 null

3、方法区

方法区:存储 .class 相关信息,包括方法的信息(即,方法的定义等)

4、本地方法栈

与操作系统相关

5、寄存器

与 CPU 相关

java 实现内存数据表_数据结构 Java中的内存相关推荐

  1. java 十亿数据去重_如何在有限的内存限制下实现数十亿级手机号码去重

    版权申明 原创文章:本博所有原创文章,欢迎转载,转载请注明出处,并联系本人取得授权. 版权邮箱地址:banquan@mrdwy.com 问题难点 文本和数据的去重是经常要用到的重要操作,普通数量的文本 ...

  2. 使用qsort对不连续的内存数据排序_数据结构教程_v20201121

    数据结构入门 1.    什么是数据结构 2.    数据结构有哪些,常用数据结构详解 3.    数据的逻辑结构和存储结构(物理结构)详解 4.    数据结构和算法的关系和区别 5.    数据结 ...

  3. java触发器如何创建表_在java 中执行触发器代码、创表语句

    由于程序的需要,在SQLServer 中创建触发器及建表,碰到了在java 代码中执行创建触发器及表. /**建立中间表*/ public static final String createMidd ...

  4. java while九九乘法表_用java实现三种方法循环输出九九乘法表:

    展开全部 for循环的结构:for(表达式 1:表达式 2:表达式  3) {  循环体  } 表达式 1:一般为赋值表达式:62616964757a686964616fe78988e69d83313 ...

  5. JAVA链表返回子表_基于java的链表反转

    链表反转是链表基础操作之一,其中重点在于节点断开对下一节点引用前用一个中间变量保存对下一节点的引用 现有如下链表 具体步骤如下 创建一个节点变量 temp 保存第三个节点的引用 .断开第二个节点对第三 ...

  6. java引用其他类的数据头文件_Java 实现数据表与简单Java类映射转换

    我们在程序开发过程中往往会使用简单Java类进行数据表结构的描述,本文主要介绍如何简单Java类与数据表之间的转换. 首先,先简单介绍一下数据表与简单Java类的相关概念对比: 表的定义 → 实体表设 ...

  7. 数据表与简单Java类映射转换(一对多、多对多、角色与权限) - Java基础知识 6

                                                            目录 数据表与简单Java类映射转换 一对多映射 多对多映射 角色与权限 学习笔记 数据 ...

  8. Java 第9 章 : 数据表与简单Java类映射转换

    课时38:综合实战:数据表与简单Java类映射转换 简单Java类是现在面向对象设计的主要分析基础,但是对于实际的开发之中简单Java类的定义来源是有依据的,往往都是根据数据标的结构来实现简单Java ...

  9. 数据表与简单Java类映射转换

    综合实战:数据表与简单Java类映射数据转换 简单Java类是现在面向对象设计的主要分析基础,但是对于实际开发之中简单Java类的定义来源是有依据的,往往都是根据数据表的结构来实现简单Java类. 在 ...

最新文章

  1. 算法设计与分析 0 算法与性能:GCD与冒泡排序
  2. 青春是如此美好,又怎忍平凡度过
  3. Jquery对象的文档处理,CSS和事件
  4. weexapp 开发流程(一)开发环境配置
  5. easyui datagrid onLoadSuccess方法 正确使用
  6. C#中关于处理两个大数相乘的问题
  7. How to install Toad on linux with Corssover
  8. android多线程文章,Android 多线程处理之多线程用法大集合
  9. Flink EventTime和Watermarks原理结合代码分析(转载+解决+精简记录)
  10. 在Angularjs中使用directive自定义指令实现attribute的继承
  11. NET Framework安装不成功解决办法
  12. 自然辩证法2018版_2018年《自然辩证法概论》已整理
  13. Linux下安装搜狗拼音输入法(Ubuntu18.04.2 LTS)
  14. 手机只能上QQ不能看网页
  15. Android Studio实现记单词App,背完四六级一次过~
  16. 大数据技术之Spark(一)Spark Core
  17. python 流水作业调度_动态规划——流水作业调度问题
  18. visualmap折线图_echarts折线图实现切断效果
  19. Necklace(树状数组+离线操作)
  20. BZOJ1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛

热门文章

  1. 各種語系的unicode對應以及local編碼方式
  2. GPU Gems 1: Chapter 22. Color Controls
  3. 华为应用锁退出立即锁_华为P40系列三大安全锁,教你锁住你的隐私 - 企业资讯...
  4. 果园机器人反思稿_《果园机器人》教学反思
  5. python俗称_python为什么叫爬虫?
  6. VUE-用到的样式左右(transform,translate,padding)
  7. c语言课程设计 职工工资处理系统,院职工工资管理系统_C语言课程设计-2017年10月.doc...
  8. 5 多数据save_5个高质量行业数据报告资源下载地方,自己想一下有多重要吧
  9. Python基础语法案例(Fibonacci):选择结构、循环结构、异常处理结构、代码优化
  10. 常用Python标准库对象速查表(1)