Java基础--数组

数组
一. 概述
  1. 定义:数组是一种数据结构,用来存储同一类型值的集合。

2. 数组是存在下标索引的,通过下标可以获取指定位置的元素,数组小标是从0开始的,也就是说下标0对应的就是数组中第1个元素,可以很方便的对数组中的元素进行存取操作。

3. 数组存在一维数组和多维数组。

二. 一维数组 
  1. 声明方式一
    A. 数据类型 数组名 = new 数据类型[个数]

       String s[] = new String[10];

定义了一个长度为10的String类型的一维数组。

B. 数据类型[] 数组名 = new 数据类型[个数]

       String[] s = new String[10];

定义了一个长度为10的String类型的一维数组。

数组属于引用数据类型,它指向的是内存中的一个对象的地址。只要使用new对象产生一个对象或数组都会在堆内存中创建一块内存空间,然后将这块空间的内存地址赋给引用变量,

以上只是声明创建一个大小为10的数组,但是没有给每一个元素赋值,所以体现出来的都是这个数据类型的默认值,即String类型的默认值为null。

2. 声明格式二
   A. 数据类型 数组名[] = {元素1,元素2,元素3,……数值n};

                       int  a[] = {1,3,6,0,2,8,10};

声明一个为数组长度为7的int类型数组,并静态的为数组每一个小标对应的元素赋值。

B. 数据类型[] 数组名 = {元素1,元素2,元素3,……数值n};
        int[] a = {1,3,6,0,2,8,10};

声明一个为数组长度为7的int类型数组,并静态的为数组每一个小标对应的元素赋值。

3. 创建一个匿名数组
      new int[]{1,3,6,0,2,8,10};

4. 数组与数组之间的赋值关系
      String s[] = new String[10];

String t[] = s;

5. 一维数组长度:数组名.length
  6. 一维数组的有效最大角标:数组名.length-1
三. 二维数组
  1. 定义:
    二维数组实际上是指数组元素为一维数组的一维数组,简单说也就是数组中的数组。

2. 声明格式一  
    数据类型 数组名[][] = new 数据类型[个数][个数];

数据类型[][] 数组名= new 数据类型[个数][个数];

int arry[] [] = new int[5][6];

上述语句声明了一个二维数组,其中[5]表示该数组有(04)5行,每行有(05)6个元素,因此该数组有30个元素,其中[5]也可说是有5个一维数组,

[6]可以说是每一个一维数组中有6个int型号的元素。

数组new出来后,就在堆内存中开辟的内存空间,并将所在内存空间地址返回给arry数组变量,因为以上语句只是声明了一个数组并未没一个元素赋值,

所以都是类型默认值,为0。

array[0][0]=3;即给第一个一维数组中的第一个元素赋值.

依此方式还可以和其他元素赋值。

3. 声明格式二   
    int[][] arr = new int[3][];

此二维数组中含有3个一维数组,每个一维数组的默认初始化值都为null,每个一维数组中的元素值都为0;可对每个一维数组赋值,如:
      arr[0] = new int[3];

arr[1] = new int[2];

arr[2] = new int[1];

对每个一维数组中某个元素赋值:如:

           arr[0][2]=90;

           arr[1][1]=89;

           arr[2][2]=78;

4. 声明格式三  
    显式初始化二维数组:int[][] arr = {{1,5,7},{4,8},{3,9,20,12}}

A. 以上数组定义了一个长度为3的数组,arr.length=3

B. 数组中第一维数组的长度:arr[0].length=3

四. 数组的应用代码
  1. 获取一个数组中的最大值和最小值  
复制代码
1 public class ArrayMaxMinValue {
2 public static void main(String[] args) {
3 int[] array = {7,9,6,3,9,8,0,10,2,1};
4 System.out.println(“最大值: “+getMaxValue(array));
5 System.out.println(“最小值: “+getMinValue(array));
6 }
7 public static int getMaxValue(int 8 int max = a[0];//一开始假设最大值为a[0]
9 for(int i = 1 ; i < a.length ;i++) {
10 if(a[i] > max) {
11 max = a[i];//每一次比较将大值赋值给max变量存储
12 }
13 }
14 return max;
15 }
16 public static int getMinValue(int a[]) {
17 int min = 0;//一开始假设最小值为角标为0的元素
18 for(int i = 1 ; i < a.length ;i++) {
19 if(a[i] < a[min]) {
20 min = i;//每一次比较将最小值的角标赋值给min变量存储
21 }
22 }
23 return a[min];
24 }
25 }
复制代码
  2.对数组进行排序
复制代码
1 public class ArraySortTool {
2 public static void main(String[] args) {
3 int[] array = {7,9,6,3,9,8,0,10,2,1};
4 System.out.println(“排序前:”);
5 printArray(array);
6 bubblSort(array);
7 System.out.println(“排序后:”);
8 printArray(array);
9 }
10 //选择排序
11 public static void SelectSort(int[] a) {
12 //外层循环写成i < a.length-1,是因为选择排序,
13 //当到最后一个元素的时候,就不需要进行选择排序的,因为数序已 经确定了
14 for(int i = 0 ; i < a.length-1 ; i++) {
15 //内层循环写成i < a.length,是因为每一个选择用来比较的元素都要比较到最后//一个元素,
16 //int j = i+1是因为没一个元素都不需要和自身比较
17 for(int j = i+1 ; j < a.length ; j++) {
18 if(a[i] > a[j]) {
19 //交换两个值
20 int temp = a[j];
21 a[j] = a[i];
22 a[i] = temp;
23 }
24 }
25 }
26 }
27 //冒泡排序
28 public static void bubblSort(int a[]) {
29 //a.length-1冒泡排序是每一次相邻两个元素进行比较,总共要比较a.length-1次
30 //int i=0 是因为比较是从角标0开始的
31 for(int i = 0 ; i < a.length-1; i++) {
32 //a.length-1-i,第一轮全部计较,每轮比较都产生一个最值,
33 //下一轮这个最值就不用参与比较了
34 //int j = i+1因为是相邻比较,所以要改成int j = i+1
35 for(int j = 0 ; j < a.length-1-i ; j++) {
36 //因为是两两比较所以要写成a[j] > a[j+1]
37 if(a[j] > a[j+1]) {
38 int temp = a[j+1];
39 a[j+1] = a[j];
40 a[j] = temp;
41 }
42 }
43 }
44 }
45 //用来打印数组
46 public static void printArray(int a[] ) {
47 System.out.print(”[”);
48 for(int i = 0 ; i < a.length ; i++) {
49 if(i == a.length-1) {
50 System.out.println(a[i]+”]”);
51 }
52 else {
53 System.out.print(a[i]+",");
54 }
55 }
56 }
57 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值