java里面数组简单认识

数组认识:

数组申请内存时,在空间上是连续的(如何证明数组在空间连续呢),数组的优点主要是查询比较快

jdk中的数组:

java替我们封装了许多内置对象,我们只需要传递参数就可以,例如:Arrays对象

构造方法:

分析:可以看出构造方法被私有化,这样我们就不会产生新的对象,只能调用里面的静态方法。

rangeCheck方法:

jdk1.7 使用的是快速排序

快速排序的基本思想:

扫描二维码关注公众号,回复: 3844879 查看本文章

首先选择一个基准点,这个基准点选择可能影响快速排序的速度(固定基准点,随机基准点,三数取中),然后用head和last所对应的值,用last值和基准点进行比较,如果小于基准值,就交换head和last所对应的元素,再接下来就用head的值和基准值比较,如果head的值大于基准值,就进行交换所head和last的值,直到head>=last(递归结束条件),一次比较完成。

1.  这个程序使用的是快速排序和递归,那么递归最重要的是,递归的结束条件,以及递归如何在内存里面运行(正在研究)。

2.  选取一个基准值,采用固定切分发(这个效率可能不是特别高)。

3. 思想就是把大于基准值的放在右边,小于基准值放在左边。

jdk1.8 增加新特性并行排序,Arrays.parallelSort使用了Java7的Fork/Join框架使排序任务可以在线程池中的多个线程中进行,Fork/Join实现了一种任务窃取算法,一个闲置的线程可以窃取其他线程的闲置任务进行处理。(这个将在后面的多线程中讨论

ArrayList认识

1. 从上面源码中,我们可以看出最基本的信息ArrayList提供三种初始化方式

2.  elementData来保存数组信息,并且用transient来修饰。

分析:为什么要使用transient来修饰elementData

首先我们解释transient作用,它主要是在序列化过程中时不序列化transient修饰的成员变量,但是问题是elementData保存我们的

数据,那么我们的数据将会在序列化的过程中去哪里了,我们看ArrayList源码发现它实现序列化接口,里面实现两个方法writeObject和readObject,但是这两个方法的作用是什么呢,就是在序列化过程中不把整个elementData序列化,因为可能我们没有用完的空间,那么这两个方法将帮助我们序列化我们需要的数据。

猜你喜欢

转载自blog.csdn.net/weixin_41629878/article/details/83021655