Java基础——数组

1 一维数组

1.1 数组概念

数组:同一种数据类型的集合,数组就是一个容器,可以自动给数组从0开始编号,可以存储多个相同类型数据的容器,方便管理多个数据,数组中的数据会自动编号,编号从0开始。

注意:

声明一个变量就是在内存空间划出一块合适的空间

声明一个数组就是在内存空间划出一串连续的空间。

所有数组的元素必须是相同的类型。

数组可以存储基本数据类型,也可以存储引用数据类型。

数组的长度是固定的。

1.2 数组定义和初始化

1.2.1数组的定义

定义:int[] arr ;   int  arr[];(不常用)

1.2.2 数组的初始化

为数组元素分配内存空间,并为每个数组元素赋初始值。

静态初始化

当明确数组中的元素时,程序员指定每个元素的初始值,系统决定数组长度。

元素类型[] 数组名 = new 元素类型[]{元素,元素,……};

int[]   a    = new  int[]{1,2,3,4};     int[]   a    ={1,2,3,4};

动态初始化

当不明确数组中的元素时,程序员只指定数组长度,系统分配初始值。

元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

int[]  a     = new int[4];

注意:

数组元素下标从0开始,比如:int[] a = {1,2};  ages[0] = 1; ages[1]=2;

数组的属性,length 数组中元素的个数,即数组的长度  a.length = 2;

数组元素最大下标值 = 数组长度 – 1。

不能同时使用静态和动态初始化,即不能既指定数组长度,又指定其元素初始值。

访问数组时要注意角标越界异常或空指针异常。

1.3 内存问题

栈内存:用于存储局部变量,即在函数中定义的变量,当数据使用完,所占空间会自动释放。

堆内存:存储的是数组和对象,通过new建立的实例都存放在堆内存中。当没有引用指向数据时,数组或对象就会变成垃圾,在随后一个不确定的时间被垃圾回收机制释放掉。

以 int[] a = new int[4]为例,说明数组在内存中的初始化过程:

首先在栈内存中出现一个数组引用a,系统在堆内存中开辟空间,为数组分配内存地址,在堆内存中建立数组对象,进行默认初始化或显示初始化。最后将内存地址赋给栈内存中的a变量。

注意:赋给a的不是数组本身,而是数组在内存中的地址。

1.4数组常见操作

1.4.1 数组遍历


1

2

for(int i=0;i<arr.length;i++)

    System.out.println(arr[i]);

1.4.2 获得最值


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

public static void main(String[] args)

{

    int[] arr = {3,2,1,4,5,6};

    int x = getMax(arr);

    int y = getMin(arr);

    System.out.println(x);

    System.out.println(y);

}

// 获取最大值

public static int getMax(int[] arr)

{

    int max = arr[0];

    //i从1开始,因为第一个数不用跟自己比

    for(int x=1; x<arr.length; x++)

    {

        if(arr[x]>max)

            max = arr[x];

    }

    return max;

}

// 获取最小值

public static int getMin(int[] arr)

{

    int min = arr[0];

    //i从1开始,因为第一个数不用跟自己比

    for(int i=1; i<arr.length; i++)

    {

        if(arr[i]<min)

            min = arr[i];

    }

    return min;

}

1.4.3 排序


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

// 选择排序

int[] arr = {16,35,24,13,2,21};

for (int x = 0;x < arr.length - 1;x++){

    for (int y = x + 1;y < arr.length;y++){

        if (arr[x] > arr[y]){

            int temp = arr[x];

            arr[x] = arr[y];

            arr[y] = temp;

        }

    }

}

// 冒泡排序

int[] arr = {16,35,24,13,2,21};

for (int x = 0;x < arr.length - 1; x++)

{

    //-1防止角标越界

    //-x为了提高效率

    for (int y = 0;y < arr.length - 1 - x;y++)

    {

        if (arr[y] > arr[y+1])

        {

            int temp = arr[y];

            arr[y] = arr[y+1];

            arr[y+1] = temp;

        }

    }

}

1.4.4 查找


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

// 普通查找(无序数组)

int[] arr = {13,42,12,34,5,26};

public static int getIndex(int[] arr,int key)

{

    for (int x = 0;x < arr.length;x++){

        if (key == arr[x]){

            return x;

        }

    }

    return -1;

}

// 二分查找(有序数组)

public static int getIndex(int[] arr,int key) {

    int min = 0;

    int max = arr.length-1;

    int mid = (min + max)/2;

    while (key != arr[mid]){

        if (key > arr[mid]){

            min = mid + 1;

        }else if (key < arr[mid]){

            max = mid - 1;

        }

        if (min > max){

            return -1;

        }

        mid = (min + max)/2;

    }

    return mid;

}

1.4.5 数组反转


1

2

3

4

5

6

7

8

9

10

11

public static void revArray(int[] arr)

{

    int start = 0;

    int end = arr.length-1;

    for (int start=0,end = arr.length-1;start<end ;start++, end--)

    {

        int temp = arr[start];

        arr[start] = arr[end];

        arr[end] = temp;

    }

}

1.4.6 打印数组


1

2

3

4

5

6

7

8

9

10

11

public static String arrPrint(int[] arr) {

    String str = "[";

    for (int x = 0; x < arr.length; x++){

        if (x != arr.length - 1) {

            str = str + arr[x] + ", ";//[6, 5,

        }else {

            str = str + arr[x] +"]";

        }

    }

    return str ;

}

2 二维数组

2.1 二维数组定义和初始化

定义二维数组:数组中的数组 int[][] arr; char[][] ch;

初始化二维数组:

格式1:int[][] arr = new int[3][2];

定义了名称为arr的二维数组,arr中有3个一维数组,每一个一维数组中有2个元素,一维数组的名称分别为arr[0], arr[1], arr[2]。

arr[1]:二维数组中的第二个一维数组名

arr[1][1]:二维数组中的第二个数组的第二个元素

给第一个一维数组0脚标位赋值为1写法是:arr[0][0] = 1;

格式2:int[][] arr = new int[3][];

定义了名称为arr的二维数组,二维数组中有3个一维数组,每个一维数组都是默认初始化值null。

可以对这个三个一维数组分别进行初始化

arr[0] = new int[3];  arr[1] = new int[5];  arr[2] = new int[7];

格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};

定义了名称为arr的二维数组,二维数组有3个一维数组。第一个一维数组有3个元素,第二个一维数组有2个元素,第三个一维数组有4个元素。

2.2 常见二维数组的操作

(1)二维数组的遍历


1

2

3

4

5

6

7

8

9

int[][] arr2 = new int[2][3];

public static void printArray2(int[][] arr2){

    for(int i=0; i<arr2.length; i++){

        for(int j=0; j<arr2[i].length; j++){

            System.out.print(arr2[i][j]+" ");

        }

        System.out.println();

    }

}

(2)二维数组的应用(求和)


1

2

3

4

5

6

7

8

9

public static void printArray2(int[][] arr2){

    int sum = 0;

    for(int i=0; i<arr2.length; i++){

        for(int j=0; j<arr2[i].length; j++){

            sum = sum + arr[i][j];

        }

        System.out.println("sum =" + sum);

    }

}

来自为知笔记(Wiz)

时间: 2024-08-24 12:38:25

Java基础——数组的相关文章

[java基础]数组1

[java基础]数组1 1 /** 2 文件路径:G:\JavaByHands\数组 3 文件名称:ArrayTest.java 4 编写时间:2016/6/13 5 编写说明:学习数组的使用方法~~ 6 知识来源:疯狂java讲义 7 */ 8 9 /* 10 数组是用来储存多个数据的一种数据结构~~ 11 一个数据被成为一个数组元素 12 可以通过数组元素的索引来访问数组元素 13 java要求所有的数组元素具有相同的数据类型 14 一旦数组初始化完成,数组在内存中所占的空间将被固定下来,长

Java基础——数组Array

一.数组基本概念 数组是相同类型数据的有序集合. 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成.其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们. 数组有三个特点: 1. 其长度是确定的.数组一旦被创建,它的大小就是不可以改变的.不可越界,如果越界,则报:ArrayIndexOutOfBoundsException 2. 其元素必须是相同类型,不允许出现混合类型. 3. 数组中的元素可以是任何数据类型,包括基本类型和引用类型. 数组不属于八种基本数据类

Java基础——数组复习

数组是一个变量,存储相同数据类型的一组数据 声明一个变量就是在内存空间划出一块合适的空间 声明一个数组就是在内存空间划出一串连续的空间 数组长度固定不变,避免数组越界 数组是静态分配内存空间的,所有元素存放在一组连续的存储单元中,一旦分配,不可更改,不便于扩展, 数组便于查找和修改,不利于插入和删除. 使用数组 : ① 声明数组    ② 分配空间    ③ 赋值    ④ 处理数据 Java中数组定义要指定长度. 数据类型[] 数组名 = new 数据类型[数组长度]; 数据类型[][] 数组

Java基础——数组应用之StringBuilder类和StringBuffer类

一.StringBuffer类 StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类. 所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入.删除等操作,使用StringBuffer要更加适合一些. 在StringBuffer类中存在很多和String类一样的方法,这些方法在功能上和String类中的功能是完全一样的

JAVA基础-数组的排序(选择排序和冒泡排序),总结精辟!!!

1.-------寄语 对于初学JAVA的同学来说,排序是在陌生不过的一个基础题了.但是由于自己刚刚步入学习JAVA的世界,很多东西不能很好的理解,导致自己虽然可以敲出代码或者大致能够想明白, 但是对于解决问题的思想并没有很好的深入.(其实一开始学习也没必要太刨根问底,等到自己有一定的基础了,有时间了再研究一下.抱着研究的态度感觉会更好一点.其实大部分目前的 开发者都是经过了一段时间的培训,在培训的过程中,课程速度特别快,有时候我们必须要“不拘小节”,掌握培训中的主流知识才是明智之举.如果你正在

黑马程序员——Java基础-数组

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概念 数组就是同一种类型那个数据的集合,是一个容器,是引用类型,存储在堆中. 好处:可以自动给数组中的元素从0开始编号,方便操作这些元素 格式: 1. int[] arr=new int[5]; 创建一个长度为5 的,变量名为arr,类型为整型的数组. 2. int[] arr=new []{5,6,8,3,4} int[] arr={5,6,8,3,4} 数组中常见问题: 1.数组角标越界

一天一个Java基础——数组

一天一个变成了几天一个,最近接受的新东西太多.太快,有好多需要blog的但没有时间,这些基础知识应该是要深挖并好好研究的,不应该每次都草草了事,只看个皮毛. 数组: JVM将数组存储在一个称为堆(heap)的内存区域中,堆用于动态内存分配,在堆中内存块可以按随意的顺序分配和释放 1.int[] a; ——表示声明一个数组(也可写为 int a[];) 声明一个数组变量时并不在内存中给数组分配任何空间,只是创建一个对数组的引用的存储位置 如果变量不包含对数组的引用,那么这个变量的值为null 通过

java基础数组(带基础排序法)

数组是一种数据结构,用来储存同一类型值的集合 1.数组需要先声明数组类型(即储存的数据类型)如:int [] a;       其中int是数组类型[]代表一维数组a代表数组名. 2.创建数组a:    int [] a = new int[100];   表明创建一个储存100 个整型数的数组没有具体值时默认为0. 也可以直接创建有具体内容的数组: int [] a = {1, 2, 3, 4, 5, 6, 7, 8, 9} ; boolean数组的元素会初始化为false: 对象数组的元素则

JAVA基础--数组的应用04

一.数组的简单应用 1. 数组平均值 例子:求下列数字的平均值:1.0,2.4,3.5,4.3,5.1,6.8,7.2,8,9,10 1 package cn.haile.array; 2 3 /** 4 * 练习数组的应用 5 * 6 * @author 小白 7 */ 8 public class ArrayPractise { 9 10 /** 11 * @param args 12 */ 13 public static void main(String[] args) { 14 dou

黑马程序员-java基础-数组&amp;进制转换

第一讲  数组初始化&操作 1.  数组定义 概念:数组是同一种类型数据的集合,其实数组就是一个容器.数组中的元素从0开始编号,这样方便了对这些元素进行操作(获取.修改改.排序等). 数组的定义格式有: Int[] arr = new int[10]; ——这里指定数组的长度,后续需要分别对每一个元素赋值: Int[] arr = new int[]{2,1,5,9}:——创建数组实体并初始化,不需要指定长度: Int[] arr = {2,1,5,9};——定义数组并初始化: 2.  数组操作