1、数组
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即:数(数据)组(一组)就是一组数据
1、数组的使用
1、数组的定义
数据类型 数组名[] = new 数据类型[大小]
或者
数据类型[] 数组名= new 数据类型[大小]
例如:
int[] a = new int[5] 与 int a[] = new int[5]是等价的
建议使用== 数据类型[] 数组名= new 数据类型[大小]==这种方式
例如:
int [] score = new int[5];
这种方式经常忘记,提醒自己,数组是引用类型,可以直接new 基本数据类型的数组;
2、数组的引用
数组名[下标]
3、静态初始化
int[] a = {1,2,3,4,5,6,7,8,9}
4、数组使用注意事项和细节
(1)数组是多个相同类型数据的组合,实现对这些数据的统一管理(2)数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
(3)数组创建后,如果没有赋值,有默认值int0,short0,byte0,long0,float0.0,double0.0,char\u0000,booleanfalse,Stringnull
(4)使用数组的步骤
1.声明数组并开辟空间
2给数组各个元素赋值
3使用数组
(5)数组的下标是从0开始的。
(6)数组下标必须在指定范围内使用,否则报:下标越界异常,比如:int[]arr=newint[5];则有效下标为0-4
(7)数组属于引用类型,数组型数据是对象(object)
2、数组赋值机制
(1)基本数据类型赋值,这个值就是具体的数据,而且相互不影响。即是值拷贝。intn1=2;intn2=n1;
(2)数组在默认情况下是引用传递,赋的值是地址。
关于基本数据类型赋值方式是值传递,而引用类型赋值是地址传递非常重要在开发中要特别注意
但有时候我们确实有这样的需要,就是要实现引用类型的值拷贝,修改新的变量后不会影响原来的变量的值。可以这样开辟新的空间,再通过给元素赋予相同值的方法完成。
/**
* @author Francis
* @create 2021-06-19 18:56
*/
public class ArrayCopy {
public static void main(String[] args) {
//将int[]arr1={10,20,30};拷贝到arr2数组,
// 要求数据空间是独立的.
int[] arr1 = {10, 20, 30};
//创建一个新的数组arr2,开辟新的数据空间
// 大小arr1.length;
int[] arr2 = new int[arr1.length];
//遍历arr1,把每个元素拷贝到arr2对应的元素位置
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
//修改arr2,不会对arr1有影响
arr2[0] = 100;
//输出arr1
System.out.println("====arr1的元素====");
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);//10,20,30
}
System.out.println("====arr2的元素====");
for(int i=0;i<arr2.length;i++){
System.out.println(arr2[i]);
}
}
}
3、数组的扩容
思路:定义一个比原来的数组array长度大一个的数组newArray,循环将原来数组array的每个元素的值赋给newArray,并将newArray的最后一个元素给赋予需要的值,最后将newArray赋给array。
4、数组的缩减
思路是数组扩容的逆向
2、排序
排序是将多个数据,依指定的顺序进行排列的过程。
排序的分类:
(1)内部排序:
指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择式排序法和插入式排序法);
(2)外部排序法
数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)
1、冒泡排序法
冒泡排序(BubbleSorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
/**
* @author Francis
* @create 2021-06-20 11:11
*/
public class BubbleShort {
public static void main(String[] args) {
int[] arr = {12, 56, 48, 369, -1, -56, 45, 96};
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
//外层循环是4次
for (int j = 0; j < arr.length - 1 - i; j++) {
//4次比较-3次-2次-1次//如果前面的数>后面的数,就交换
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println("\n==第" + (i + 1) + "轮==");
}
for (int j = 0; j < arr.length; j++) {
System.out.print(arr[j] + "\t");
}
}
}
3、查找
在java中,我们常用的查找有两种:
(1)顺序查找
(2)二分查找(要求查找的数组是有序的)
4、二维数组
二维数组的注意事项和使用细节
(1)一维数组的声明方式有
:int[] x或者intx[]
(2)二维数组的声明方式有:
==int[][] y或者int[] y[] 或者int y[][]
(3)二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如:map[][]是一个二维数组
(4)二维数组也有动态初始化和静态初始化两种方式