JAVA学习总结-常用数据结构

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)作为数组元素的下标,因为哈希码较大,容易越界;可以在哈希码和下标之间做映射关系,

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

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

原文地址:https://www.cnblogs.com/Kingram/p/8988651.html

时间: 2024-08-30 11:58:12

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

JAVA学习之常用集合List,Set,Map

常用的集合有List,Set,Map,这三个都是接口,其中List,和Set继承于Collection而Map是一个可以保存键值对的接口 Collection接口Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些 Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”

java学习笔记--常用类

一.Math类:针对数学运算进行操作的类 1.常用的方法 A:绝对值   public static int abs(int a) B:向上取整  public static double ceil(double a) C:向下取整 public static double floor(double a) D:两个数据中的大值 public static int max(int a, int b) E:a的b次幂 public static double double pow(double a

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

Object类的toString方法 将一个对象返回为字符串形式,但一般使用的时候会覆盖重写toString方法 Object类是所有类的父亲 // public class Person { private String name; private int age; //============================================================================= public String toString(){//toString

java学习之常用Java Profiling工具的分析与比较

在 Java 程序的开发过程中,不可避免地会遇到内存使用.性能瓶颈等问题.Java Profiler 工具能帮助开发人员快速.有效地定位这些问题,因此成为了 Java 开发过程中的一个重要工具.目前市场上的 Java Profiler 工具种类繁多,本文将对目前比较常见的几种工具进行简要介绍,并从功能.性能等角度作比较,从而帮助 Java 程序员选择合适的 Java Profiler 工具. 本文主要分为三个部分:第一部分简要介绍 Java Profiler 工具的原理:第二部分对目前常见的 J

Java学习---6.常用的容器,流

1.java提供的容器的API位于java.util包内. set:不可以重复,无序.List:可以重复,有顺序.map:键值对的映射方法. Collection c=new ArrayList(): 2.泛型:用到集合时使用泛型,在定义集合的时候定义集合的类型,.可以增强程序的可读性和稳定性. 3.流:Java流式输入/输出原理:

Java学习资料-常用流类

1.常用流类 1.1 字节流 1.1.1 InputStream(输入流) 1.1.2 OutputStream(输出流) 1.1.3 FileInputStream(文件输入流) 1.1.4 FileOutputStream(文件输出流) 1.1.5 BufferedInputStream(缓冲输入流) 1.1.6 BufferedOutputStream(缓冲输出流) 1.1.7 PrintStream(打印流) 1.2字符流 1.2.1 Reader类 1.2.2 Writer类 1.2.

JAVA学习第三十六课(常用对象API)- 集合框架(四)— Set集合:HashSet集合演示

随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里很多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发常用 HashSet集合 .TreeSet集合 Set集合的元素是不重复且无序 一.HashSet集合 API文档解释:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null 元素. 此类为基本操作提供了稳定性能,注意,此实现不是同步的. 由上可

Java大课堂:常用数据结构一

Java大课堂:常用数据结构一 背景 在计算机科学的学习中,数据结构是个绕不开的问题.那么我将在接下来的时间,简明扼要的介绍常见数据结构以及部分源码.下面我将简单介绍本大课堂涉及到的内容. 众所周知,一款好用的数据结构,不仅包括数据结构的实现,还有相关工具集.比如c++中stl有大量的工具函数,比如sort,accumulate,reduce,for_each,remove_if,count,count_if.其实在java中也有类似的实用算法.下面我将介绍常用的数据结构以及工具集合. Coll

Java学习-005-初学常用的几个经典循环控制源代码

最近一段时间公司 App 改版,一直处在需求评审.代码评审.测试计划.测试用例.用例评审.用例执行.缺陷管理.测试总结的循环中,因而博客也好久没有更新了.虽然工作确实忙了点,但是也是自己懒惰了,从今天开始陆续整理之前学习 Java 时写的 Java 程序,并记录在博客中,供自己查阅,也希望能给初学 Java 的亲们一份参考,希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激! 此文主要讲述在初学 Java 时,常用的几个经典的循环控制程序的源码整理.源代码测试通过日