本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这篇东西。

  一,数组,数组和集合是Java中常用到的。

  用Java去创建数组:

  double[] myList;

  这时myList 只是代表声明了一个只存放double类型的数组,并没有实体。

  要想创建myList的实体,则要给它一个固定的大小,也就是说,数组存放数据的内存是一块连续的区间。

  myList = new double[3];

  double[0] = 5.62;

  double[1] = 3.62;

   double[2] = 3.32;

  上面就是Java中数组的创建,那么我们看下常见数据结构有哪些?

  大概八种,数组Array,栈Stack,队列Queue,链表Linked List,树Tree,哈希表Hash,堆Heap,图Graph.

  其中就有数组Array,那么Java中的数组是不是数据结构?

  我们看下百度定义:

  数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。

  https://www.cnblogs.com/ysocean/p/7889153.html#_label0_0

  还有这个链接的见解,参考这俩个,数组是属于数据结构的。

  二,集合。  

  Collection
     ├List
  │├LinkedList
  │├ArrayList
  │└Vector
  │ └Stack
     └Set
  │ └SortedSet
  └Queue

  -Map
  ├HashTable
  ├HashMap
  └WeakHashMap

  如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口

  

    三,数据结构。

  数据结构和算法是结合的基础。(个人见解)

  数组(Array)

  数组存储的空间是连续不间断的。动态数组ArrayList底层是用数组实现的,那么就会有一个疑惑,数组是一个固定大小的利用连续空间存储的方式,为什么ArrayList能动态?因为当ArrayList要动态增加大小的时候,先是复制自己外加要增加的那部分(这部分暂存在某个缓存中?),然后在一片新的足够大的空间粘贴上去,之前的那段删掉。这种说法我不知道是不是错误的(这部分要在集合部分研究),我另外的想法:上面那种数据量大的时候,那个在中间暂时保存之前的ArrayList的缓存(或某个其他的中间介质)是不是也要足够大?这当然不现实的,所以ArrayList的做法是先寻找到一个足够大的空间,这个空间是之前的1.5陪,(ArrayList每次动态增加会增加自己的一半大小)直接从原来的位置复制到新的位置。

  

  

  栈(Stack)

  栈是Vector的一个子类,它实现了一个标准的后进先出的栈。堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。可以参考http://www.runoob.com/java/java-stack-class.html。

  

  

  队列(Queue)

  先进先出

    

  链表(Linked List)

  链表所占用的存储空间不是连续的,正因如此,会有一个链头,链头会有连个消息,一个要记录的元素,一个记录其下一个元素的指针(这是单向链,还有双向链'一头记录上一个元素的位置,一头记录下一个元素的位置,中间是自己要记录的元素',循环链等等)。这种利用空间的方式,可以让链表能快速进行增加元素的功能,毕竟那里有空间就让要增加的元素放在哪里好了(这里我有一个疑问,单向链表最后一个对象是的指针是指向null的,所以如果新增元素的时候,那里有空间就让要增加的元素放在哪里好了这句话是错的,如果这样,那么新增元素的上一个元素的指针的指向位置是已经固定的了,这样会有矛盾)所以链表最后一个元素的指针指向null,null的位置就是新增的元素的位置。删除,删除快,是对于删除最后一个元素而言的,在链表中间删除,根本就不快,要想想中间删掉一个,那么会有几步操作,先保存要删的链单位的指向下一个元素的指针,删掉要删的链单位,找到要删的链单位的上一个链单位,替换其指针,所以要删除链表中间的链单位,相当于查找俩次链单位,效率不快。查找,每次新的查找,都要从链头开始,数据量上去了,排在末尾的链单位要花费的时间越长。

  

  树(Tree)

  各种树,常见有二叉树:

    

  红黑树:

  

  2-3-4树:

  

  哈希表(Hash)

  https://www.cnblogs.com/s-b-b/p/6208565.html

  哈希表很重要,是hashtable和hashmap实现的基础。

  

  堆(Heap)

  https://blog.csdn.net/juanqinyang/article/details/51418629

  图(Graph)

  https://www.cnblogs.com/moonlord/p/5938061.html

   四,算法

  https://blog.csdn.net/qq_23994787/article/details/77951244

  https://www.cnblogs.com/10158wsj/p/6782124.html?utm_source=tuicool&utm_medium=referral

  冒泡,插入,选择排序等等

Java的数组,集合,数据结构,算法(一)的更多相关文章

  1. java基础---数组的排序算法(3)

    一.排序的基本概念 排序:将一个数据元素集合或序列重新排列成按一个数据元素某个数据项值有序的序列 稳定排序:排序前和排序后相同元素的位置关系与初始序列位置一致(针对重复元素来说,相对位置不变) 不稳定 ...

  2. java基础---数组的查找算法(2)

    一.查找的基本概念 查找分为有序查找和无序查找,这里均以数组为对象,有序查找指的是数组元素有序排列,无序查找指的是数组元素有序或无序排列 平均查找长度(Average Search Length,AS ...

  3. java实现数组集合转成json格式

    一.下载fastjson.jar http://repo1.maven.org/maven2/com/alibaba/fastjson 二.项目添加jar包 Java Build Path 三.导入类 ...

  4. Java 内功修炼 之 数据结构与算法(一)

    一.基本认识 1.数据结构与算法的关系? (1)数据结构(data structure): 数据结构指的是 数据与数据 之间的结构关系.比如:数组.队列.哈希.树 等结构. (2)算法: 算法指的是 ...

  5. Java数组的排序算法

    在Java中,实现数组的排序算法有很多,如冒泡排序法.选择排序法.直接插入法和快速排序法等.下面介绍几种排序算法的具体 实现. 本文引用文献:Java必须知道的300个问题. 1.冒泡排序法 1.1 ...

  6. java中数组以及集合

    java中数组: 数组在Java里是一种特殊类型,有别于普通的“类的实例”的对象.但实际数组也是一种对象类型,int[]a = new int[5]  a是在java栈中分配的引用变量,类型是int[ ...

  7. 一篇文章让你了解动态数组的数据结构的实现过程(Java 实现)

    目录 数组基础简单回顾 二次封装数组类设计 基本设计 向数组中添加元素 在数组中查询元素和修改元素 数组中的包含.搜索和删除元素 使用泛型使该类更加通用(能够存放 "任意" 数据类 ...

  8. Java自学第6期——Collection、Map、迭代器、泛型、可变参数、集合工具类、集合数据结构、Debug

    集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值. ...

  9. 初转java随感(一)程序=数据结构+算法

    大学刚学编程的时候,有一句很经典的话程序=数据结构+算法 今天有了进一步认识. 场景: 1.当前局面 (1)有现成的封装好的分页组件 返回结果是page.类型为:Page.包括 page 分页信息,d ...

随机推荐

  1. HDU 1542 Atlantis(扫描线)题解

    题意:给n个可能相交的矩形,问你不重复的总面积 思路:扫描线,一边扫一边加. 扫描线:图片来源:理解扫描线 假设我们要算以下四个矩形面积,显然中间深色的是重复的.我们按照x的大小,从左往右扫,然后用线 ...

  2. 数据结构与算法(C#)入门 --- 序

    注:本系列文章适合新手入门.博主也是摸着石头过河,难免有错误之处.还请谅解~ ~~~ 数据结构是什么? 数据结构是计算机存储.组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合 ...

  3. MapReduce编程:数字排序

    问题描述 将乱序数字按照升序排序. 思路描述 按照mapreduce的默认排序,依次输出key值. 代码 package org.apache.hadoop.examples; import java ...

  4. 【搬运工】mysql用户权限设置

    关于mysql的用户管理,笔记 1.创建新用户 通过root用户登录之后创建 >> grant all privileges on *.* to testuser@localhost id ...

  5. 比NPOI更好用的Excel操作库——EPPlus

    提到通过纯.Net读写Excel,一般首先想到的自然是大名鼎鼎的NPOI,就连微软官方的MSDN都有专门的一篇文章来介绍它的用法.今天在一个项目中使用到了导出报表为Excel的功能,便特地的试用了一下 ...

  6. CPU高的排查

    之前有朋友反馈说发的内容希望有个梯度,逐步加深,前面发了几篇关于jvm源码分析的文章,可能我觉得我已经把内容写得浅显易懂了,但是对于某些没怎么接触的同学来说还是比较难理解,这个我以后慢慢改进吧,今天发 ...

  7. Java中封装类型.valueOf()

    @Test public void test() { Integer i3 =128; Integer i4=128; boolean integerGT127=i3==i4; //false Sys ...

  8. kafka知识点

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  9. [原][译]我们为什么需要另一个c++测试框架?Catch||Why do we need yet another C++ test framework?

    翻译问题来源:https://github.com/catchorg/Catch2/blob/master/docs/why-catch.md 其他辅助博文:从Google Test 转到 Catch ...

  10. Android人脸识别Demo竖屏YUV方向调整和图片保存

    本博客包含三个常用方法,用于盛开Android版人脸识别Demo中竖屏使用时送入yuv数据,但一直无法识别的情况. 1.首先可以尝试顺时针旋转90°或270°,然后送入识别SDK. 2.旋转方向后依然 ...