zoukankan      html  css  js  c++  java
  • 集合框架之数组集合算法

    如何检测程序的健康程度?

    如果想要知道程序运行所占的CPU和内存的情况可以使用飞行器,这样就可以知道程序的稳定性了。在JDK的bin目录下可以找到飞行器。如下图:
    image

    数组集合算法:

    1.数组与集合的区别和联系:
    数组是有限存储(规定了数组长度就只能存储那么多值),而集合是无限存储,但其实集合也是由数组做成的。

    2.数组集合算法的原理:
    当向集合里面存储一个值时,集合里面会为其申请一个适当长度的数组来存储,第二次存储值时,如果数组的长度不足以存储第二次的值,就重新申请一个长一点的数组,先把原来的数组里的内容导入进去,再将新的内容存储进去。也不用担心原来的数组会浪费内存,因为系统的垃圾回收机制会自动回收。例如:向数组里面存储一个A时,申请一个长度为1的数组去存储,当再向里面存储一个B时,因为数组长度不够,会重新申请一个长度为2的数组,先将原来的A导入进去,再将B存储进去。原来的数组因为没有引用就被回收。如下图:
    image
    3.代码实现:
    3.1 第一个版本
    3.1.1 代码如下:
    image
    image
    3.1.2 调试如下:
    image
    断点可以让程序运行至此就停留,调试(右键选择Debug模式即为调试)时可以使其再一步一步的执行,可以看到其每一步执行的详细结果。如下:
    image
    image
    3.1.3 用飞行器检测的结果
    image

    3.2 第二个版本:用循环复制值的速度较慢,有一个System.arraycopy方法可以直接连着内存一起复制,这个方法是由其他能直接操控内存的语言(如C)来实现的。
    3.2.1 代码如下:
    image
    3.2.2 用飞行器检测结果如下:
    image
    3.3 第三个版本:前面两个在每次存储值时都要重新申请数组,这样加长了运行时间,为了减少运行时间可以在每次申请数组时使得新数组的长度是老数组的长度的倍数,虽然会浪费一定的内存,但是浪费少量的内存可以换来更快的运行时间。
    3.3.1 代码如下:
    image
    3.3.2 飞行器检测结果如下:
    image
    3.4系统写的版本:
    image
    image
    3.5标准版:
    image

    image

    image

  • 相关阅读:
    Balance的数学思想构造辅助函数
    1663. Smallest String With A Given Numeric Value (M)
    1680. Concatenation of Consecutive Binary Numbers (M)
    1631. Path With Minimum Effort (M)
    1437. Check If All 1's Are at Least Length K Places Away (E)
    1329. Sort the Matrix Diagonally (M)
    1657. Determine if Two Strings Are Close (M)
    1673. Find the Most Competitive Subsequence (M)
    1641. Count Sorted Vowel Strings (M)
    1679. Max Number of K-Sum Pairs (M)
  • 原文地址:https://www.cnblogs.com/kaigexuetang/p/7233905.html
Copyright © 2011-2022 走看看