写代码的四点:
1.明确需求。要做什么?
2.分析思路。要怎么做?(1,2,3……)
3.确定步骤。每一个思路要用到哪些语句、方法和对象。
4.代码实现。用具体的语言代码将思路实现出来。
学习新技术的四点:
1.该技术是什么?
2.该技术有什么特点?(使用需注意的方面)
3.该技术怎么使用?(写Demo)
4.该技术什么时候用?(在Project中的使用场景 )
----------------------早计划,早准备,早完成。-------------------------
数组的概述:
数组是同一种类型数据的集合,是一个容器,用来存储固定大小的同类元素。它可以自动给数组中的元素从0开始编号,方便操作。
数组的元素是通过索引访问的,数组索引从0开始,所以索引值从0到元素个数 -1;
数组可以作为函数的参数和函数的返回值使用。
数组可以通过下标来引用。Java对数组元素要进行越界检查以保证安全性。
数组通过length属性来指明它的长度。
声明数组变量:
格式1:元素类型【】 元素名;(推荐)
int[]
arrayInt
;
格式2:元素类型 元素名【】;
int
arrayInt[]
;
一维数组的初始化:
格式1:元素类型【】 元素名 = new 元素类型【元素个数或数组长度】;
动态初始化,可以在声明以后进行初始化。
int
[] arrayInt =
new int
[
3
]
;
arrayInt[
0
] =
1
;
arrayInt[
1
] =
2
;
arrayInt[
2
] =
3
;
格式2:元素类型【】 元素名 = {元素0,元素1,......};
静态初始化,在声明数组的同时进行初始化。
int[] arrayInt = {
9
,
3
,
7}
;
二维数组的初始化:
格式1:元素类型【】【】 元素名 = { { 元素00,元素01 } , { 元素10,元素11,元素12},......};
int[][] arrayTwoInt = {{
3
,
2}
, {
11
,
22}
, {
8
,
7
,
4}}
;
解释:定义了名称为arrayTwoInt的二维数组,二维数组中有3个一维数组,
前两个一维数组中有2个元素,最后一个一维数组中有3个元素。
数组空间不是连续分配,所以不要求二维数组中的每一维的大小相同。
格式2:元素类型【】【】 元素名 = new 元素类型【一维数组个数】【一维数组的元素个数】;
int[][] arrayTwoInt =
new int[
3][
2]
;
解释:定义了名称为arrayTwoInt的二维数组,二维数组中有3个一维数组,
每一个一维数组中有2个元素。
格式3:元素类型【】【】 元素名 = new 元素类型【一维数组个数】【】;
int[][] arrayTwoInt =
new int[
3][]
;
arrayTwoInt[
0] =
new int[
3]
;
arrayTwoInt[
1] =
new int[
2]
;
arrayTwoInt[
2] =
new int[
1]
;
解释:定义了名称为arrayTwoInt的二维数组,二维数组中有3个一维数组,
每个一维数组都是默认初始化值null,可以分别对三个一维数组进行初始化,
arrayTwoInt[0] = new int[3];
arrayTwoInt[1] = new int[2];
arrayTwoInt[2] = new int[1];
多维数组:依照二维数组,以此类推。
数组的遍历(两种方式):
1.通过for循环遍历数组,以获取数组中的每一个元素。
int[] arrayInt = {
9
,
3
,
7}
;
for (
int i =
0
; i < arrayInt.
length
; i++) {
LogUtil.
e(
"输出数组中的每一个元素"
,
"第" + i +
"个元素:" + arrayInt[i])
;
}
2.“增强”for循环,专门用来遍历数组。
int[] arrayInt = {
9
,
3
,
7}
;
for (
int element : arrayInt) {
LogUtil.
e(
"输出数组中的每一个元素"
, element +
"")
;
}
Arrays类:
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。
包含以下功能:
1.数组赋值:通过fill方法;
int
[] ints =
new int
[
5
]
;
Arrays.
fill
(ints
,
4
)
;
for
(
int
i =
0
;
i < ints.
length
;
i++) {
LogUtil.
e
(
"填充数组:Arrays.fill(array, 4)"
,
ints[i] +
""
)
;
}
Arrays.
fill
(ints
,
2
,
4
,
8
)
;//数组,脚标起始点,脚标终止点(包含头不包含尾),填充的值
for
(
int
i =
0
;
i < ints.
length
;
i++) {
LogUtil.
e
(
"将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8)"
,
ints[i] +
""
)
;
}
2.数组排序:通过sort方法(升序);
int[] array = {
19
,
5
,
11
,
34
,
23
,
9
,
7}
;
Arrays.
sort(array
,
2
,
7)
;
//数组,脚标起始点,脚标终止点(包含头不包含尾)
for (
int i =
0
; i < array.
length
; i++) {
LogUtil.
e(
"对数组的第2个到第6个元素进行升序排序:Arrays.sort(array,2,7)"
, array[i] +
"")
;
}
Arrays.
sort(array)
;
for (
int i =
0
; i < array.
length
; i++) {
LogUtil.
e(
"对整个数组进行升序排序:Arrays.sort(array)"
, array[i] +
"")
;
}
3.比较数组:通过equals方法比较数组中元素值是否相等;
int[] array1 = {
19
,
5
,
11
,
34
,
23
,
9
,
7}
;
int[] array2 = {
0
,
5
,
11
,
34
,
23
,
9
,
7}
;
Arrays.
equals(array1
, array2)
;
LogUtil.
e(
"比较数组元素是否相等:Arrays.equals(array1, array2)"
, Arrays.
equals(array1
, array2) +
"")
;
int[] array3 = array2.clone()
;
Arrays.
equals(array2
, array3)
;
LogUtil.
e(
"克隆后数组元素是否相等:Arrays.equals(array2, array3)"
, Arrays.
equals(array2
, array3) +
"")
;
4.查找数组元素:通过binarySearch方法对排序好的数组进行二分查找法操作。
int[] array = {
19
,
5
,
11
,
34
,
23
,
9
,
7}
;
//使用二分搜索算法查找指定元素所在的脚标(必须是排序好的,否则结果不正确)
Arrays.
sort(array)
;
Arrays.
binarySearch(array
,
7)
;
LogUtil.
e(
"元素7在array中的位置:Arrays.binarySearch(array, 7)"
, Arrays.
binarySearch(array
,
7) +
"")
;
Arrays.
binarySearch(array
,
100)
;
//如果不存在就返回负数-8(-(数组的长度 + 1))
LogUtil.
e(
"元素100在array中的位置:Arrays.binarySearch(array, 100)"
, Arrays.
binarySearch(array
,
100) +
"")
;
5.将多种类型的数组转成String类型字符串:
int[] array = {
19
,
5
,
11
,
34
,
23
,
9
,
7}
;
boolean[] array1 = {
true, false}
;
String s = Arrays.
toString(array1)
;
LogUtil.
e(
"将多种类型的数组转成String类型字符串"
, s)
;
注意:
1.内存一旦分配不能改变,所以说静态数组一旦被声明,它的容量就固定了,不容改变。
因此在声明数组时,一定要考虑数组的最大容量,防止容量不够的现象。
2.如果想要在运行程序时改变容量,就需要用到数组列表(ArrayList,也称为动态数组)或
向量(Vector)。
---------------------------------------------------------------------------------------------------------------------------
早计划,早准备,早完成。 欢迎关注!交流!Star!
GitHub:https://github.com/wangyang0313
微信公众号:一个灵活的胖子MrWang
简书:https://www.jianshu.com/u/e5e733d79b96