A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jql229660105 初级黑马   /  2019-9-28 12:17  /  1770 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  Java中有很多关于算法的学习内容,比如1.插入排序(直接插入排序、希尔排序)2.交换排序(冒泡排序、快速排序)3.选择排序(直接选择排序、堆排序)4.归并排序5.分配排序(基数排序)等等,Java中有关的算法内容是特别的重要的,这是你不得不掌握好的Java基础知识.
  在平常的编程工作中,用到的Java数据结构技术并不算多。但是了解数据结构的基础知识还是非常重要的!可能在你学Java的过程中,不同的阶段对算法的要求可能不同,所以对Java中算法部分的学习,你务必得多多用心。学Java前,也许你的算法基础不是太好,完全没有必要但新,在今后的学习过程中,这个是可以后天补求的,新人Java程序员,不需要太担心算法不好学不好Java编程开发。

  数据结构训练了建模和算法思维,这是计算机编程的根本性思维。基本的数据结构的基本操作要明白, 如果这个思维不掌握,那么任何其他编程语言你都操作不了,简单的模型都没有概念,很难快速形成建模,更不容易自己设计好的算法。就好像做基础的数学运算训练对解题是否有帮助一样,直接来看并没有。但是这种思维的训练确实需要有个基础的可以循序渐进的方法。
  Java有自带的数据结构,刚开始你可能还没搞懂,先用起来再说。数据结构的作用在于可以处理解决流程化的一些问题,实际上是一种数学模型。关于算法,如果你去了大公司,有了大项目,你就会发现有些东西不用算法就完成不了了。总的来说前期还是要把数据结构和算法了解下,随着编程技能的增加,有了一定的项目经验,在回过头来看数据结构和算法,你将有更深刻的理解。
首先我们先从我们最熟悉的数组开始说,之前面试的时候,问到数组问题的时候,就想某些List的底层是数组结构,然后说增删慢,查询快,但是如果你真的去了解一下底层的话,这说法太笼统,但是实际比对还真的是没有办法做到那么细致,所以很不容易发现问题,所以我专门的去看了一下相关的书籍,也做了一些简单的测试。总结了几下几点内容。

首先我们先说查询快,其实你可以想一下,如果数组,我们查询是根据下标内容来查询的话,那是很快的,但是通常情况我们是根据什么来查找呢,我们是根据元素值来查找的,
给定一个元素值,对于无序数组,我们需要从数组第一个元素开始遍历,直到找到那个元素。
有序数组通过特定的算法查找的速度会比无序数组快。

增删问题上来说,
首先我们先说说增加,
对于无序的数组来说,元素没有按照从大到小或者某个特定的顺序排列,只是按照插入的顺序排列。无序数组增加一个元素很简单,只需要在数组末尾添加元素就ok了,但是有序数组却不一定了,它需要在指定的位置插入。要是是一个升序的数组1-200,你插入了一个100,那么就会在中间插入,那就意味着他回去先看前面的100个数,所以,插入的时候对无序数组来说是快的。
而对删除来说,根据元素值删除,我们要先找到该元素所处的位置,然后将元素后面的值整体向前面移动一个位置。也需要比较多的时间。

数组结构还有一个最大的缺点,那就是动态扩容问题,他是没有办法解决的,
数组一旦创建之后,大小固定了,那么注定了他不能的动态扩展数组中元素的个数,如果初始化的时候给的贼大,不好意思,资源浪费,如果初始化的时候给的贼小,不好意思数据有点多,装不下。

很显然,数组虽然插入快,但是查找和删除都比较慢,而且扩展性差,所以我们一般不会用数组来存储数据.

2 个回复

倒序浏览
发光并非太阳的专利,你也可以发光。加油
回复 使用道具 举报
发光并非太阳的专利,你也可以发光。加油
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马