目录
一、数组基础知识
1.定义:数组是存放相同类型元素的集合。
2.数组的创建及初始化
以整型数组为例:
1.int[ ] array1 = {1,2,3,4};
2.int[ ] array2 = new int[ ]{1,2,3,4};
3.int[ ] array3 = new int[10];//没有初始化,默认被初始化为0.
3.数组的操作
(1)遍历数组
方法一:for循环
public class TestDemo {
public static void main(String[] args) {
int[] array={1,2,3};
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
}
方法二:for-each 增强for循环(还可以用到打印集合当中的元素)
public class TestDemo {
public static void main(String[] args) {
int[] array={1,2,3};
for(int x:array){
System.out.print(x+" ");
}
}
}
方法三:借助Java本身提供的一些方法来进行数组的打印
介绍一个类:Arrays, 主要作用:操作数组
Arrays.toString(array); //把参数的数组转换为字符串进行输出
import java.util.Arrays;
public class TestDemo {
public static void main(String[] args) {
int[] array = {1,2,3};
String ret = Arrays.toString(array);
System.out.println(ret);
}
}
运行结果:方括号代表方法内部帮你进行了这样的组装
二、数组占用的内存
1.JVM中的内存分布
(1)Java虚拟机栈:存放局部变量....
(2)Java本地方法栈:运行一些由c/c++代码编写的程序[JVM其实是一个软件,是一个由c/c++代码编写的软件]
(3)堆:只要是对象,都在堆上分配内存 (数组就是一个数组对象),使用new创建的对象都在堆上保存
(4)程序计数器:存放一些指令的地址
(5)方法区:存放静态成员变量....方法编译出的字节码就是保存在这个区域
对JVM内存划分,更加简洁,方便管理
2.数组在堆和栈上的分配情况
array是在栈上,{1,2,3}在堆上
array中存储的是地址
注:
(1)对引用和对象的理解
引用是一个变量,里面存的是地址。
int[]array1={1,2,3};
array1这个引用指向{1,2,3}这个对象。
(2)引用能指向引用吗?
不能。
array1 = array2代表array1这个引用 引用了array2所引用的对象
引用只能指向对象,引用指向引用这句话就不对
(3)一个引用能同时指向多个对象吗?
不能同时。
(4)引用一定在栈上吗?
不一定。现在之所以把它画在栈上,我们目前只是接触到了局部变量,还没有接触到成员变量。
(5)引用赋值null代表什么?
int[ ] array = null 代表这个引用 不指向任何对象
三、数组的应用
1.保存数据
public class TestDemo {
public static void main(String[] args) {
int[] array = {1,2,3};
for (int i = 0; i < array.length ; i++) {
System.out.print(array[i] +" ");
}
}
}
2.作为函数的参数
import java.util.Arrays;
public class TestDemo {
public static void func(int[] array){
array = new int[]{11,12,13,14};
}
public static void func1(int[] array){
array[0]= 100;
}
public static void main(String[] args) {
int[] array1= {1,2,3,4};
func(array1);
System.out.println(Arrays.toString(array1));
int[] array2 = {10,20,30};
func1(array2);
System.out.println(Arrays.toString(array2));
}
}
输出结果:
所以传引用不一定改变对象的值
3.数组作为函数的返回值
import java.util.Arrays;
public class TestDemo {
public static int[] func(){
int[] array = {1,2,3};
return array;
}
public static void main(String[] args) {
int[] ret = func();
System.out.println(Arrays.toString(ret));
}
}
四、数组练习
1.数组转字符串
public class TestDemo {
public static String myToString(int[] array){
String str = "[";
for (int i = 0; i < array.length; i++) {
str = str + array[i];
if(i != array.length-1){
str += ",";
}
}
str += "]";
return str;
}
public static void main(String[] args) {
int[] array = {1,2,3};
String ret = myToString(array);
System.out.println(ret);
}
}
2.数组的拷贝
方法一:使用for循环进行拷贝
public class TestDemo {
public static void main(String[] args) {
int[] array = {1,2,3,4};
int[] copy = new int[array.length];
for (int i = 0; i < array.length; i++) {
copy[i] = array[i];
}
System.out.println(Arrays.toString(copy));
}
}
方法二:通过Arrays.copof来拷贝
import java.util.Arrays;
public class TestDemo {
public static void main(String[] args) {
int[] array = {1,2,3};
int[] copy = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(copy));
}
}
方法三:使用System.arraycopy
public class TestDemo {
public static void main(String[] args) {
int[] array = {1,2,3};
int[] copy = new int[array.length];
System.arraycopy(array,0,copy,0,array.length);
}
}
方法四:通过 数组名.clone()
import java.util.Arrays;
public class TestDemo {
public static void main(String[] args) {
int[] array = {1,2,3};
int[] copy = array.clone();
System.out.println(Arrays.toString(copy));
}
}