java中集合框架其实就是数据结构的实现的封装;

参考资料:任小龙教学视频

1,什么是数据结构?

数据结构是计算机存储,组织数据的方式;

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合;

通常情况下,精心选择的数据结构可带来更高的运行或者存储效率,

数据结构往往同高效的检索算法和索引技术有关;

2,数据结构的基本功能

增(Create)  删(Delete)   改(Update)  查(Read)

3,常见的数据结构

3.1,数组Array;

数组是最简单的数据结构;是用来存放同一种数据类型的集合.

从增删改查分析数组的性能:

增:在数组的最后一个位置添加元素是很方便的,但是要是想在第一个位置添加元素就很麻烦了,后面的所有元素都要整体后移,容量不够还要进行扩容;

删:把数组的最后一个元素删除是很方便的,但是要删除第一个位置的元素就很麻烦,后面的所有元素都要整体前移;

改:修改指定下标的元素只要操作一次即可;

查:如果查询指定下标的元素只要操作一次即可,如果查询指定元素的下标,此时需要使用线性搜索(挨个找),

综上:数组的改查性能比较高,增删性能比较低;

3.2链表Linked List; 

 链表是通过引用来表示上一个节点和下一个节点的关系;

1》单点链表// 只能从头遍历到尾/只能从尾遍历到头

通过next存储下一个节点,Node next表示的就是下一个节点;

2》双向列表// 既可以从头遍历到尾,也能从尾遍历到头

通过prev表示上一个节点,Node prev表示的是上一个节点;

从增删改查分析链表的性能:

增:双向链表可以直接获取第一个节点和最后一个节点.如果新增的元素在第一个位置或者最后一个位置,则操作只有一次;

删:把第一个元素或者最后一个元素删除只要操作一次;

改:不存在下标的概念,需要进行遍历;

查:不存在下标的概念,需要进行遍历;

综上:链表的增删性能较高,改查性能较低;

3.3栈Stack;

是一种运算受限的线性表,后进先出(LIFO);

仅允许在列表的一端添加和删除元素,这一端被称为栈顶,相对的把另一端称为栈底

向一个栈中添加元素,又称为压栈或者进栈或者入栈,他是把新元素放在栈顶元素的上面,使之成为新的栈顶元素;

从一个栈删除元素,又称之为出栈,他是把栈顶元素删掉,使之相邻的元素成为栈顶元素;

栈是基于数组实现的,下标为0的元素就是栈底元素,最后一个元素就是栈顶元素;

3.4队列Queue;

队列是一种特殊的线性表,特殊之处在于,只允许表的前端进行删除操作,表的后端进行添加操作

和栈一样,队列是一种受限的线性表

进行插入操作的端称为队尾,进行删除操作的端称为队头;

单向队列:先进先出(FIFO)只能从队列尾插入数据,只能从队列头删除数据;

双向队列:既可以从队列尾/头插入数据,也可以从队列头/尾删除数据;

3.5哈希表Hash

在一般的数组中,元素在数组中的下标位置是随机的,元素的取值和元素的位置之间存在不确定的关系;

因此数组在查找值时,需要把查找值和一系列的元素进行比较;此时的查询效率依赖于查找过程中所进行的比较次数;

如果元素的值(value)和数组中的下标(index)有一个确定的对应关系(hash),

公式:index = hash(value);

这样的数组就称之为哈希表,哈希表最大的用处就是提供查找数据的效率;

一般情况不会把哈希码(hashCode)作为数组元素的下标,因为哈希码较大,容易越界;可以在哈希码和下标之间做映射关系,

数组会记录元素的添加顺序,并且允许元素重复;

哈希表不会记录元素的添加顺序(哈希算法进行排序使之一一对应),不允许重复,原因是:如果元素重复,导致哈希码值相等,导致下标相等

JAVA学习总结-常用数据结构的更多相关文章

  1. java学习笔记--常用类

    一.Math类:针对数学运算进行操作的类 1.常用的方法 A:绝对值   public static int abs(int a) B:向上取整  public static double ceil( ...

  2. Java学习:常用函数接口

    常用函数接口 什么是函数式接口? 函数式接口,@FunctionalInterface,简称FI,简单的说,FI就是指仅含有一个抽象方法的接口,以@Functionalnterface标注 注意:这里 ...

  3. Java学习随笔---常用API(二)

    Object类的toString方法 将一个对象返回为字符串形式,但一般使用的时候会覆盖重写toString方法 Object类是所有类的父亲 // public class Person { pri ...

  4. python学习之常用数据结构

    前言:数据结构不管在哪门编程语言之中都是非常重要的,因为学校的课程学习到了python,所以今天来聊聊关于python的数据结构使用. 一.列表 list 1.列表基本介绍 列表中的每个元素都可变的, ...

  5. Java学习笔记--常用容器

    容器 1. 出现原因 解决程序运行时需要创建新对象,在程序运行前不知道运行的所需的对象数量甚至是类型的问题. Java中提供了一套集合类来解决这些问题包括:List.Set.Queue.Map 2. ...

  6. Java学习之==>常用字符串方法

    1.定义字符串 // 定义, 为初始化 String str1; // 定义, 并初始化为null String str2 = null; // 定义, 并初始化为空串 String str3 = & ...

  7. 吴裕雄--天生自然数据结构与算法:java代码实现常用数据结构——链表Linked List

    class Node{ // 定义节点类 private String data ; // 保存节点内容 private Node next ; // 表示保存下一个节点 public Node(St ...

  8. Java 常用数据结构对象的实现原理 集合类 List Set Map 哪些线程安全 (美团面试题目)

    Java中的集合包括三大类,它们是Set.List和Map, 它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类. List.Set都继承自Collection接口 ...

  9. 图解Java常用数据结构

    最近在整理数据结构方面的知识, 系统化看了下 Java 中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于 jdk8, 可能会有些特性与 jdk7 之前不相同, 例如 LinkedList ...

随机推荐

  1. go语言笔记——数组长度不可变,但是元素值是可变的!!!

    数组声明的格式是: var identifier [len]type 例如: var arr1 [5]int 在内存中的结构是: 对索引项为 i 的数组元素赋值可以这么操作:arr[i] = valu ...

  2. B1818 [Cqoi2010]内部白点 树状数组

    这个题的想法很好想,就是进行排序之后直接检查每个点的上下左右是否有黑点就行.但是直接枚举显然不行,那怎么办呢?我们就用树状数组维护扫描线,把每排左右点看成一条线覆盖,然后从下往上扫,遇到下加一,遇到上 ...

  3. JSP-Runoob:JSP 动做元素

    ylbtech-JSP-Runoob:JSP 动做元素 1.返回顶部 1. JSP 动作元素 与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用.JSP动作元素是用XML语法写成的. 利用J ...

  4. IDEA Spark Streaming 操作(文件源)

    import org.apache.spark.SparkConf import org.apache.spark.streaming.{Seconds, StreamingContext} obje ...

  5. 洛谷P1731生日蛋糕(dfs+剪枝)

    P1731 生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为R ...

  6. akka设计模式系列-消息模型

    通过前面的文章我们总结了几个常见的actor设计模式,但此处不得不提前介绍一下在Akka中消息的设计模式.随着对Akka的使用,我们会发现,使用Akka设计系统其实就是面向消息编程.actor之间消息 ...

  7. 动态规划DP入门

    百度百科↓ 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家R.E.Bellman ...

  8. ACM_堆箱子咯(栈)

    堆箱子咯 Time Limit: 2000/1000ms (Java/Others) Problem Description: 双十一大家都在买买买,可忙坏了快递小哥了.zl和皮卡鸡在大伙在剁手的时候 ...

  9. 336 Palindrome Pairs 回文对

    给定一组独特的单词, 找出在给定列表中不同 的索引对(i, j),使得关联的两个单词,例如:words[i] + words[j]形成回文.示例 1:给定 words = ["bat&quo ...

  10. Mysql中的索引()key 、primary key 、unique key 与index区别)

    CREATE TABLE pre_forum_post ( pid int(10) unsigned NOT NULL COMMENT '帖子id', fid mediumint(8) unsigne ...