您的位置:首页 > 编程语言 > Java开发

JAVA中数组的定义及使用

2020-01-13 12:04 106 查看

1、数组:相同类型数据的集合
2、数组定义的方式:
(1)动态初始化–有new
int[] array = new int[ ]{1,2,3,4};
数组类型 new产生一个对象
定义数组的同时进行初始化
(2)静态初始化—无new,也产生了对象
int[] array = int[]{1,2,3,4};
(3)int[] array = new int[10];
3、遍历数组
(1)for循环
i < array.length ----面向对象,可直接拿出来用
array[i]
(2)foreach—不能用下标
for (int x : array) {
数组当中的元素
System.out.print ( x + " " );
}
(3)java.util.Arrays—java中操作数组的工具类
import java.util.Arrays;
sout + Arrays.toString(array);
System.out.print ( Arrays.toString(array) );
for和foreach区别:
for:通过下标访问,可以用下标
foreach:直接访问元素,不能用下标
4、引用:就是存放地址的----------默认值null
println(array2) => [I@16d3586 地址 地址的哈希码
地址是唯一的,对应的哈希码也是唯一的

高配的指针
在方法里可以改变数组的值
5、 引用和传值的区别
传数组 传值
6、JVM内存区域划分(前5)
(1)程序计数器:存放下一条指令,非常小
PC Register
(2)java虚拟机栈:平时说的栈,主要存放局部变量表,1-2M
IVM Stack
(3)本地方法栈:主要用来调用native方法,存放native方法的局部变量
Native Method Stack
native方法:是由C/C++代码实现的方法,一般体现在源码当中
(4)堆:主要用来存放对象。 new出的对象 非常大
Heap
(5)方法区:用来存放静态变量,类信息,字节码文件数据
Method Area
类信息:class对象
(6)常量池:主要用来存放字符串常量。
String str = “hello”; "hello"就存放在常量池
在JDK1.7以前,常量池存放在方法区;JDK1.7及以后,挪到了堆里
例:int[] array = {1,2,3};
栈 堆
每个线程(Thread)都会有三个独立区域:程序计数器, 虚拟机栈, 本地方法栈
7、越界异常java.lang.ArrayIndexOutOfBoundsException
(1)array[0]-----注意下标从0开始,不能越界
(2)int array ={}
array[0]
8、空指针异常
(1)int[] array = null;
array.length
9、运算符 .
.属性 .行为(方法)
10、数组的拷贝(4种)
(1)for循环
(2)System.arraycopy
System.arraycopy( array, 0, array2, 0, array.length);
(Object src,int srcPos,Object dest,int destPos,int length)
Object src:源数组
int srcPos:从源数组的pos位置开始拷贝
Object dest:目的地数组
int destPos:目的地数组的位置
int length:拷贝的长度
(3)Arrays.copyOf
int[] array2 = Arrays.copyOf(array,array.length);
(int[] ariginal,int newLength)
源数组 拷贝的长度
System.arraycopy与Arrays.copyOf的区别:
返回值:arraycopy-------- void
copyOf----------- int[]
Arrays.copyOf底层调用的是System.arraycopy
速度:System.arraycopy更快
(4)数组名.clone();
int[] array2 = array.clone();
数组名->你要拷贝的数组
clone是Object的方法,返回一个副本
注意:两个引用指向同一块空间,如果arr1[0] = 10; 那么arr2[0]也会改变,实际没有发生拷贝。
11、浅拷贝与深拷贝:
数组中是简单类型-----浅拷贝
数组中是引用类型-----深拷贝
可以对引用类型进行深拷贝,但写法需要改变
12、Arrays类当中的方法:
Arrays.toString();-------------------字符串的打印
Arrays.copyOf();-------------------字符串的拷贝
Arrays.copyOfRange();----------拷贝部分数组[)
Arrays.binarySearch();-----------二分查找
binarySearch(object[ ], int fromIndex, int endIndex, object key);
Arrays.equals();-------------------判断数组是否相同
Arrays.fill(array,9); ---------------数组的填充
Arrays.fill(array,2,7,88);---------[2,7)下标的值填充为88
Arrays.sort(array);----------------将数组进行排序
13、冒泡排序的优化
需优化的地方:有可能一开始或排了几次就有序,要添加判断有序的条件
public static void bubbleSort(int[] array) {
boolean flg = false;
//趟数
for (int i = 0; i < array.length-1; i++) {
flg = false;//因为每一趟都有能有序
//次数
for (int j = 0; j < array.length-1-i; j++) {
if(array[j] > array[j+1]) {
int tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
flg = true;
}
}
if(!flg) {
return;
}
}
}

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
qingzibbb 发布了10 篇原创文章 · 获赞 6 · 访问量 155 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: