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. P4700 算

    P4700 算 时间: 1000ms / 空间: 125829120KiB / Java类名: Main 背景 zhx和他的妹子出去玩. 描述

  2. ios9--UIImageView的帧动画

    // // ViewController.m // 05-UIImageView的帧动画 // #import "ViewController.h" @interface View ...

  3. anaconda安装python三方包,以tensorflow为例

    Anaconda概述 Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存.切 ...

  4. 杂项:E-Learning

    ylbtech-杂项:E-Learning 1.返回顶部 1. E-Learning:英文全称为(Electronic Learning),中文译作“数字(化)学习”.“电子(化)学习”.“网络(化) ...

  5. Access restriction:The type JPEGCodec is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar 报错

    报错: Access restriction:The type JPEGCodec is not accessible due to restriction on required library C ...

  6. sql数据库CHECKDB时报x个分配错误和x个一致性错误

    --1.在SQL查询分析器中执行以下语句:(注以下所用的POS为数据库名称,请用户手工改为自己的数据库名) use pos dbcc checkdb --2.查看查询结果,有很多红色字体显示,最后结果 ...

  7. jsp简单学习总结

    以下均为jsp页面 1:<jsp:include page="index.jsp"/>相当于嵌入一个页面.还有一种是<frame src="main_l ...

  8. codevs3287货车运输(最小生成树+LCA)

    3287 货车运输 2013年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description A 国有 ...

  9. 音频处理中的尺度--Bark尺度与Mel尺度

    由于人耳对声音的感知(如:频率.音调)是非线性的,为了对声音的感知进行度量,产生了一系列的尺度(如:十二平均律),这里重点说下Bark尺度与Mel尺度.刚开始的时候,我自己也没弄明白这两个尺度的区别. ...

  10. mongoDB的基本用法

    一.MongoDB初识 什么是MongoDB MongoDB是一个基于分布式文件存储的数据库.由c++语言编写.旨在为web应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库 ...