Java数组

Java数组

【摘要】这是一份记录本人【Java Learning】的资料库,输出形式主要为Java相关的Demo演示,对于一些理解比较困难的地方会拎出来通过博客详细介绍。旨在帮助自己强化相关知识的理解和养成良好的学习习惯,同时也希望可以帮助到更多的人。

前言

回顾一下自己刚刚开始认识数组的那会,还是感觉好神奇的,对着课本赞叹666。当然肯定是结合着实际场景才会体会到数组的美丽。这么聊吧,如果你想要存放全班同学的姓名,你怎么办?
如果没有接触过数组,我们一定想这样做:

1
2
3
4
String name1 = "小A";
String name2 = "小B";
//...
String nameN = "小N";

但是,肯定不是这样啦!班级如果50人,这样搞你会炸掉的,哈哈哈哈。创造来源于需求,那么,下面就来走进数组的世界。

数组特点

  • 具备相同的数据类型。
  • 所有的数组元素共享同一个数组名字。
  • 通过下标来访问元素,下标从0开始,到length-1结束。

数组定义

定义:数组是具有相同数据类型的一组数据集合。
语法:数据类型[] 数组名;
如:

1
int[] iarr ;//仅仅是定义/声明 一个整型数组。

数组初始化

如何初始化一个数组?

首先,我们要记住,数组是对象类型。
所以,需要使用new运算符来初始化数组。
最后,要明确指定数组的初始化长度。
而且,长度一旦确定,是不可再变的。

如:

1
2
3
4
5
6
7
8
int[] iarr = new int[100];
String[] names = new String[100];
//数组初始化后,它的每个元素都是默认值,其中:
byte,short,int,long =>0
double,float => 0.0
boolean => false
char => '\u0000'
对象类型 => null

数组操作

迭代数组

如何迭代一个数组?
1.普通for循环

1
2
3
4
5
//Code:
int[] iarr = new int[10];
for(int i = 0;i<iarr.length;i++){
System.out.println(iarr[i]);
}

2.增强for循环

1
2
3
4
5
6
7
8
9
语法:
for(数据类型 e: 数组名字){
//...
}
//Code:
int[] iarr = new int[10];
for(int e: iarr){
System.out.println(e);
}

元素赋值

如何给数组元素赋值?
A.一个一个赋值

1
2
3
4
5
//Code
String[] name = new String[3];
name[0] = "jack";
name[1] = "rose";
name[3] = "john";

B.在初始化时直接赋值。

1
2
3
4
5
6
7
8
9
10
//Code
String[] names = new String[]{
"jack","rose","john"
};
或:
String[] names = {"jack","rose","john"};
或:
String[] names;
names = {"jack","rose","john"};//error
names = new String[]{"jack","rose","john"};//ok

C.利用循环给元素赋值。
用来用在元素值是有“规律”的情况下。
如:

1
2
3
4
int[] arr = new int[10];//想要在此数组中存放1~10
for(int i=1;i<=10;i++){
arr[i]=i;
}

数组操作说明

数组是一种基本的数据结构[data structure]。有数据结构就会想到算法,它们相辅相成,最终目的为了数据存取的高效性。
对数据的操作,本质上可以归为:增、删、查、改。

二维数组

二维数组就是数组中的元素还是一维数组。

多维数组就是数组中的元素还是数组。

Java语言支持多维数组。

二维数组的定义:
数据类型[][] 数组名 = new 数据类型[rows][cols];
其中,在初始化二维数组时,rows必须要指定。而cols可以省略。

如果省略了cols,则表示只初始化了二维本身,而二维数组中的元素没有初始化。

如:

1
2
int[][] arr = new int[3][]; 
//初始化了二维数组,但是它的元素[一维的]并没有初始化

所以,在初始化二维数时,如果指定了 cols,则这个二维数组我们说是规则的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int[][] arr = new int[n][m]; //

如果不指定cols,则可以实现不规则的二维组。
如:
int[][] brr = new int[n][]; //只初始化了二维
进一步去初始化它的每一个元素[一维]
brr[0] = new int[1];
brr[1] = new int[2];
brr[2] = new int[3];
...
brr[n-1] = new int[n];

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

练习题

1.数组元素的copy。
A.利用java.lang.System类中的arraycopy方法。
System.arraycopy(
Object src,//源数组
int scrPos,//起始位置
Object dest,//目标数组
int destpos,//目标数组的存放起始位置
int length,//COPY元素的个数
)
要求:源数组和目标数组都是事先初始化的。
B.利用java.util.Arrays类中的copuOf方法。

2.请设计一个方法,根据用户指定的长度,来生产一个存放了指定长度的斐波那契数列值。(Fibonacci)
如:长度为10的数列为下:
1 1 2 3 5 8 13 21 34 55
点击进入答案解析

3.猜数字游戏:由程序生成一个1~100以内的随机数,然后让用户猜,如果用户所猜的数比答案大,则提示:大了。如果用户所猜的数比答案小,则提示:小了。
直到猜对为止,并输出用户猜的次数。
点击进入答案解析

4.找出1000以内的完美数。
完美数是指这个数刚好是它的所有约数之和。
如:
6=1+2+3;
点击进入答案解析

5.假设有N个小孩围成一圈,这些小孩从1开始编号,直到报到N,现在假设从1号小孩开始报数,依次类推,每报到M的小孩出列,直到所有的小孩都已出列。
请打印出出列小孩的序列。(数组存放小孩)
点击进入答案解析

结束语

哈啊哈哈,每天进步一点点哦!

评论