Java基础知识学习:数组

目录,更新ing,学习Java的点滴记录

  目录放在这里太长了,附目录链接大家可以自由选择查看--------Java学习目录

数组引入

  1. 对数组的基本看法是,你可以创建并组装他们,通过使用整型索引值访问它们的元素,并且他们的尺寸不能改变.
  2. Java中有大量其他的方式可以持有对象,那么,到底是什么使得数组变得与众不同呢?数组与其他种类的容器之间的区别有三方面:效率,类型和保存基本类型的能力.在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式.数组就是一个简单的线性序列,这使得元素访问非常快速.但是这种速度所付出的代价就是数组对象的大小被固定,并且在其声明周期内不可改变.

数组的定义

  1. 数组是相同类型数据有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标) 来访问它们。数组的四个基本特点:
     1.长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
     2.其元素的类型必须是相同类型,不允许出现混合类型。
     3.数组类型可以是任何数据类型,包括基本类型和引用类型。
     4.数组变量属于引用类型,数组也是对象。数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java 中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的

数组的声明和创建

  1. 数组的声明方式
    在这里插入图片描述
    声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM 才分配空间,这时才与长度有关
    声明一个数组的时候并没有数组真正被创建
    构造一个数组,必须指定长度。
  2. 创建基本类型–一维数组
    在这里插入图片描述在这里插入图片描述
  3. 创建引用类型—一维数组
    在这里插入图片描述
    在这里插入图片描述

数组初始化方式

  1. 数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化
  2. 静态初始化
     直接在定义数组的同时就为数组元素分配空间并赋值。
    在这里插入图片描述
  3. 动态初始化
     数组定义与为数组元素分配空间与赋值的操作分开进行
    在这里插入图片描述
  4. 默认初始化
     数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化
    在这里插入图片描述

数组的常见操作

  1. 数组创建后,我们经常需要对数组做两种最常见的操作:遍历、拷贝
  2. 遍历指的就是“通过循环遍历数组的所有元素”
  3. 拷贝指的是将某个数组的内容拷贝到另一个数组中。 实质上, Java中的容器的扩容本质上就是“数组的拷贝”
  4. 一维数组长度的获得可以用:arr.lenght(),其中arr为数组名称

数组的遍历

  1. 数组元素下标的合法区间:[0, length-1]。我们可以通过下标来遍历数组中的元素,遍历时可以读取元素的值或者修改元素的值。
  2. 使用循环初始化和遍历数组
    在这里插入图片描述

for-each循环

  1. 增强 for 循环---- for-each 是 JDK1.5 新增加的功能,专门用于读取数组或集合中所有的元素,即对数组进行遍历,并且不必为指定下标值而分心
  2. 使用增强for循环遍历数组
    在这里插入图片描述
  3. 注意点:
     for-each 增强 for 循环在遍历数组过程中不能修改数组中某元素的值。
     for-each 仅适用于遍历,不涉及有关索引(下标)的操作

数组的拷贝

  1. System 类里也包含了一个 static void arraycopy(object src,int srcpos,object dest, int destpos,int length)方法,该方法可以将 src 数组里的元素值赋给 dest 数组的元素,其中srcPos指定在源数组中开始拷贝的起始位置,destPos指定拷贝到目标数组的起始位置,length指定要拷贝元素的数量
  2. 拷贝示例
    在这里插入图片描述

java.util.Arrays类

  1. JDK 提供的 java.util.Arrays 类,包含了常用的数组操作,方便我们日常开发。Arrays 类包含了:拷贝,排序、查找、填充、打印内容等常见的操作
  2. 使用Arrays类输出数组中元素
    在这里插入图片描述
  3. 使用Arrays类对数组元素进行排序
    在这里插入图片描述
  4. 使用Arrays类实现二分查找法
    在这里插入图片描述
  5. 使用Arrays 类对数组进行填充
    在这里插入图片描述

Comparable接口

  1. 想对某个类的对象之间做比较,就需要实现 java.lang.Comparable 接口。这使你的类具有"天生"的比较能力.该接口中只有compareTo()方法,方法接收一个Object为参数,如果当前对象小于参数则返回负值,如果相等则返回0,如果当前对象大于参数则返回正值
  2. 比较示例
    在这里插入图片描述
    在这里插入图片描述

多维数组

  1. 多维数组可以看成以数组为元素的数组。可以有二维、三维、甚至更多维数组,但是实 际开发中用的非常少。最多到二维数组(学习容器后,我们一般使用容器,二维数组用的都 很少)
  2. 强调一点:以二维数组为例,定义二维数组的时候,至少得指定行数
  3. 二维数组声明方式
    在这里插入图片描述
  4. 静态初始化
    在这里插入图片描述在这里插入图片描述
  5. 动态初始化
    在这里插入图片描述
  6. 默认初始化
    在这里插入图片描述  int类型默认为0,String类型默认为""等等
  7. 获取数组长度
    在这里插入图片描述

数据存储表格数据

  1. 表格数据模型是计算机世界最普遍的模型,大家在互联网上看到的所有数 据本质上都是“表格”,无非是表格之间互相套用。如下表格是一张雇员表:
    在这里插入图片描述 观察表格,可以发现每行数据可以使用一个一维数组存储
    在这里插入图片描述
     此处基本数据类型1001,18这些都是基本数据类型,本质不是 Object 对象。JAVA 编译器会自动把基本数据类型“自动装箱”成包装类对象。
    在这里插入图片描述
     二维数组保存数据
    在这里插入图片描述
  2. 使用JavaBean对象和一维数组保存表格信息
    在这里插入图片描述
    在这里插入图片描述

常见算法_冒泡排序算法

  1. 冒泡排序算法重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就 把他们交换过来,这样越大的元素会经由交换慢慢“浮”到数列的顶端。
  2. 冒泡排序算法的运作如下:
     1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
     2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最 后的元素应该会是最大的数。
     3.针对所有的元素重复以上的步骤,除了最后一个。
     4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
  3. 冒泡排序基础算法
    在这里插入图片描述
  4. 冒泡排序优化算法
     基于冒泡排序的以下特点:
     1.整个数列分成两部分:前面是无序数列,后面是有序数列。
     2.初始状态下,整个数列都是无序的,有序数列是空。
     3.每一趟循环可以让无序数列中最大数排到最后,(也就是说有序数列的元素个数增加1),也就是不用再去顾及有序序列。
     4.每一趟循环都从数列的第一个元素开始进行比较,依次比较相邻的两个元素,比较到无序数列的末尾即可(而不是数列的末尾);如果前一个大于后一个,交换。
     5.判断每一趟是否发生了数组元素的交换,如果没有发生,则说明此时数组已经有序,无需再进行后续趟数的比较了。此时可以中止比较。
    在这里插入图片描述
  5. 冒泡排序图解
    在这里插入图片描述

常见算法_二分查找算法

  1. 二分法检索(binary search)又称折半检索,二分法检索的基本思想是设数组中的元素从小到大有序地存放在数组(array)中,首先将给定值 key 与数组中间位置上元素的关键码(key)比较,如果相等,则检索成功;否则,若 key 小,则在数组前半部分中继续进行二分法检索; 若 key 大,则在数组后半部分中继续进行二分法检索。
  2. 这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。 二分法检索是一种效率较高的检索方法。比如,我们要在数组[7, 8, 9, 10, 12, 20, 30, 40, 50,80, 100]中查询到 10 元素,过程如下:
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41649001/article/details/106616735