JavaSE系列批量处理数据神器——Java数组与引用
Posted 未见花闻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE系列批量处理数据神器——Java数组与引用相关的知识,希望对你有一定的参考价值。
⭐️前面的话⭐️
本篇文章带大家认识Java数组使用以及引用,我们都知道数组中的元素类型都是相同的,这使它具有强大的相同数据类型处理能力,由此可知它有多么的重要。Java使用数组与C语言还是存在差别的,从数组定义方式就能看出来,让我们来一探究竟吧。
📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2021年10月30日🌴
✉️坚持和努力一定能换来诗与远方!
💭参考书籍:📚《Java核心技术卷1》,📚《Java核心技术卷2》,📚《Java编程思想》
💬参考在线编程网站:🌐牛客网🌐力扣
🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
博主的码云gitee,平常博主写的程序代码都在里面。
📌导航小助手📌
🎨1.Java数组的基本用法
🎳1.1数组的定义方式
🍁方式1:
数
据
类
型
[
]
变
量
名
=
{
元
素
1
,
元
素
2
,
元
素
3
,
.
.
.
,
元
素
n
}
;
数据类型[]\\ 变量名\\ =\\ \\{元素1,元素2,元素3,...,元素n\\};
数据类型[] 变量名 = {元素1,元素2,元素3,...,元素n};
i
n
t
[
]
a
r
r
=
{
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
0
}
;
int[]\\ arr\\ =\\ \\{1,2,3,4,5,6,7,8,9,0\\};
int[] arr = {1,2,3,4,5,6,7,8,9,0};
🍁方式2:
数
据
类
型
[
]
变
量
名
=
n
e
w
i
n
t
[
]
{
元
素
1
,
元
素
2
,
元
素
3
,
.
.
.
,
元
素
n
}
;
数据类型[]\\ 变量名\\ =\\ new\\ int[]\\{元素1,元素2,元素3,...,元素n\\};
数据类型[] 变量名 = new int[]{元素1,元素2,元素3,...,元素n};
i
n
t
[
]
a
r
r
=
n
e
w
i
n
t
[
]
{
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
0
}
;
int[]\\ arr\\ =\\ new\\ int[]\\{1,2,3,4,5,6,7,8,9,0\\};
int[] arr = new int[]{1,2,3,4,5,6,7,8,9,0};
❗️new
后面那个中括号里面不能指定元素个数,必须是空的!
🍁方式3:
数
据
类
型
[
]
变
量
名
=
n
e
w
i
n
t
[
元
素
个
数
]
;
(
数
组
全
部
元
素
会
初
始
化
为
0
)
数据类型[]\\ 变量名\\ =\\ new\\ int[元素个数];\\ (数组全部元素会初始化为0)
数据类型[] 变量名 = new int[元素个数]; (数组全部元素会初始化为0)
🎳1.2数组的创建与使用
🍁数组的创建:
int[] data1 = {1,2,3,4,5,6,7,8,9,0};
int[] data2 = new int[]{1,2,3,4,5,6,7,8,9,0};
int[] data3 = new int[10];
🍁数组的使用:
import java.util.Arrays;
public class TestBlog {
public static void main(String[] args) {
//创建数组
int[] arr = new int[]{1,2,3,4,5,6,7,8,9,0};
//访问数组长度
System.out.println(arr.length);
//访问数组元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//遍历数组 1.for循环 2.foreach循环 3.toString函数
//方式1:for循环
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
//方式2:foreach循环
for (int a: arr) {
System.out.print(a + " ");
}
System.out.println();
//方式3:toString函数
System.out.println(Arrays.toString(arr));
}
}
对于数组遍历方式2:
for (接受变量: 数组) {
//语句块;
//此方法不能获取下标
}
对于遍历方式3:
toString
是JavaArrays
类中的一个方法,能够将数组转换成字符串,有,
隔开元素,中括号[]
包裹数组所有元素!
🎨2.Java类型之引用
🎳2.1引用类型
在Java当中数组其实是一个对象,我们知道在数组定义时有两种方式都用到了关键字new
,这个关键字就是实现类的实例化,实例出一个对象,使用一个能接收“实例化对象的值”的类型就是引用类型。这个“实例化对象的值”其实是一个地址,该地址指向该数组(对象),比如下面定义的x
变量定义一个数组,这个x
就是引用变量。这个与C语言中的指针有一点相似,但是它并不是指针,引用变量是一个值,在这里,该值是这个数组的地址。我们知道我们所定义的x
变量是局部变量所以它在栈上生成,而这个数组(对象)是在堆上开辟内存的。
null
表示空引用,与C语言中的NULL
很相似,表示一个无效的内存位置,既然这个内存是无效的,那肯定就不能对这个内存指向的空间进行读写。注意: Java 中并没有约定 null
和 0
号地址的内存有任何关联.
数据类型[] 变量名 = new int[元素个数]; (数组全部元素会初始化为0)
int[] x = new int[3];
x[0] = 10;
x[1] = 20;
x[2] = 30;
所谓的 “引用” 本质上只是存了一个地址. Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只是将数组的地址传入到函数形参中. 这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大)
下面用一个数组传参的例子来进一步理解引用。
🎳2.2数组传参
public class TestBolg {
public static void arrFunc(int[] arr) {
if (arr == null) {
return;
}
for (int i = 0; i < arr.length; i++) {
arr[i] = 10 * (i+1);
}
}
public static void main(String[] args) {
int[] x = new int[3];
arrFunc(x);
System.out.println(Arrays.toString(x));
}
}
对于数组的传参就是将一引用变量的值传递给方法的形参,由于引用变量存的是对象的地址,所以方法会根据传入的参数对数组(实例化的对象)进行修改或读写操作,从而使数组内元素的值发生改变,这就是引用传递。
🎳2.3认识JVM区域划分
🎨3.Java数组应用
🎳3.1利用数组求平均值与交换两个数
public class AvgSwap {
public static void swap(int[] data) {
int tmp = data[0];
data[0] = data[1];
data[1] = tmp;
}
public static double avg(int[] data) {
int sum = 0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return 1.0 * sum / data.length;
}
public static void main(String[] args) {
int[] swap = {22, 33};
int[] avg = {1,2,3,4,5,6,7,8,9,0};
System.out.println("数据交换前:a = " + swap[0] + ", b = " + swap[1]);
swap(swap);
System.out.println("数据交换后:a = " + swap[0] + ", b = " + swap[1]);
System.out.println("数组平均值为:" + avg(avg));
}
}
🎳3.2拷贝数组
import java.util.Arrays;
public class Copy {
public static int[] copy(int[] arr) {
if (arr == null) {
return null;
}
int[] copy = new int[arr.length];//新建一个数组
for (int i = 0; i < arr.length; i++) {
copy[i] = arr[i];//遍历拷贝
}
return copy;
}
public static void main(String[] args) {
int[] arr1 = {1,2,3,4,5,6,7,8,9};
System.out.println("数组1:");
System.out.println(Arrays.toString(arr1));
int[] arr2 = copy(arr1);
System.out.println("数组2:");
System.out.println(Arrays.toString(arr2));
}
}
当然Java中的Arrays
类有内置的拷贝方法:
s
t
a
t
i
c
数
据
类
型
[
]
c
o
p
y
O
f
(
数
据
类
型
[
]
o
r
i
g
i
n
a
l
,
i
n
t
n
e
w
L
e
n
g
t
h
)
static\\ 数据类型[]\\ copyOf(数据类型[]\\ original,\\ int\\ newLength)
static 数据类型[] copyOf(数据类型[] original, int newLength)
复制指定的数组,用零截取或填充(如有必要),以便复制具有指定的长度。
s
t
a
t
i
c
数
据
类
型
[
]
c
o
p
y
O
f
R
a
n
g
e
(
数
据
类
型
[
]
o
r
i
g
i
n
a
l
,
i
n
t
f
r
o
m
,
i
n
t
t
o
)
static\\ 数据类型[]\\ copyOfRange(数据类型[]\\ original,\\ int\\ from,\\ int\\ to)
static 数据类型[] copyOfRange(数据类型[] original, int from, int to) 以上是关于JavaSE系列批量处理数据神器——Java数组与引用的主要内容,如果未能解决你的问题,请参考以下文章 #yyds干货盘点#JavaSE系列Java程序设计基础——数据类型变量与运算符
将指定数组的指定范围[from, to)
复制到新数组中。