JavaDay04:数组的使用

数组

  1. 数组:用来存储多个相同数据类型的集合(容器)。
    数组中元素的数据类型必须相同
    数组是引用数据类型,对应一个地址
  2. 定义方法
    静态定义:

数据类型 [ ] 数组名 = {数组值};
数据类型 [ ] 数组名 = new 数据类型 [ ] {数组值};

其中[ ] 数组名可交换顺序

String []  nameArr = {"zhangsan","lisi","wangwu","zhaoliu","tianqi"};
int ageArr [] = new int[]{1,2,3,33,44,55,123};//必须不能定义长度

动态定义:

数据类型 [ ] 数组名 = new 数据类型 [长度 ];

数组的长度是固定的,定义后不能改变
其中[ ] 数组名可交换顺序

int arr [] = new int[50];// 一定定义长度
arr[0] = 1 ;
arr[1] = 2 ;
定义完后的默认值
byte,short,int,long---->0
float,double---->0.0
char---->\0(对应ASCⅡ表中的空格)
boolean---->false
//验证定义完后默认值
int numArr1[] = new int[20];
System.out.println(numArr1[1]); //默认值为0
		
double numArr2[] = new double[30];
System.out.println(numArr2[1]); //默认值为0.0
		
char numArr3[] = new char[10];
System.out.println(numArr3[0]);//打印结果为一个空格,\0
		
String weightArr[] = new String[4];
System.out.println(weightArr[0]);//null
  1. 元素在内存空间是连续的,每位元素都有对应的编号,从0开始
    访问数组中的某个元素是通过下标访问的: 数组名[下标]
    一下有多种方式打印数组内容:
int ageArr [] = new int[]{1,2,3,33,44,55,123};
System.out.println(ageArr[2]);//打印数组中某一元素
String []  nameArr = {"zhangsan","lisi","wangwu","zhaoliu","tianqi"};
for (int i = 0; i < nameArr.length; i++) {
System.out.println(nameArr[i]);
}//通过for循环打印数组元素,可以决定打印的元素个数
int ageArr [] = new int[]{1,2,3,33,44,55,123};
for(int i  :  ageArr){
System.out.println(i);
}//增强for循环,foreach,循环次数由集合的元素个数决定
int []  nameArr = {6,4,2,3,12,15,16};
Arrays.sort(nameArr);//排序打印
String []  nameArr = {"zhangsan","lisi","wangwu","zhaoliu"};
System.out.println(Arrays.toString(nameArr) );//直接打印
  1. 删除
    思路:已知删除C---->将D、E向左移一位得到[A B D E E]---->将最后一位赋值为‘=0’(char为字符型)
//删除C
char [] arr = {'A','B','C','D','E'};
for(int i=3;i<arr.length;i++){
	arr[i-1] = arr[i];
}
arr[arr.length-1]= '\0';
System.out.println(Arrays.toString(arr));//[A, B, D, E, ]
  1. 新增
//新增:在lisi后面新增一个数据{"zhangsan","lisi","wangwu","zhaoliu"}
String []  nameArr = {"zhangsan","lisi","wangwu","zhaoliu",null};
for(int i=nameArr.length-1;i>2;i--){
	nameArr[i] = nameArr[i-1];
}
nameArr[2] = "tianqi";
for (String name : nameArr) {
	System.out.println(name);
}
  1. 扩容
// 方法一:使用循环
String []  nameArr = {"zhangsan","lisi","wangwu","zhaoliu"};
String [] newArr = new String [8];

for(int i=0;i<nameArr.length;i++){
	newArr[i] = nameArr[i];
}
System.out.println(Arrays.toString(newArr));
//[zhangsan, lisi, wangwu, zhaoliu, null, null, null, null]
//方法二:使用System.arraycopy(nameArr,0, newArr, 0, nameArr.length)方法;被复制的数组,从哪个位置复制,要粘贴的数组,从哪个位置开始粘贴,复制的长度
String []  nameArr = {"zhangsan","lisi","wangwu","zhaoliu"};
String [] newArr = new String [8];
		
System.arraycopy(nameArr,0, newArr, 0, nameArr.length); 
		
nameArr = newArr ;//直接覆盖
		
for (String name : nameArr) {
	System.out.println(name);
}
  1. 复制
String []  nameArr = {"zhangsan","lisi","wangwu","zhaoliu"};
String [] newArr  = Arrays.copyOf(nameArr, nameArr.length);
System.out.println(Arrays.toString(nameArr) );
int []  nameArr = {6,4,2,3,12,15,16};
int [] newArr  = Arrays.copyOfRange(nameArr, 1, 3);//[1,3)
System.out.println(Arrays.toString(newArr) );
  1. 冒泡排序
public static void main(String[] args) {
int []  nameArr = {6,4,2,3,12,15,16,10};
		
for (int j = 0; j < nameArr.length-1 ; j++) {
			 
	boolean flag = true ;
			 
	for(int i=0;i<nameArr.length-1-j ; i++){
				 
	if(nameArr[i+1]<nameArr[i]){
			flag = false ;
			int temp = nameArr[i];
			nameArr[i] = nameArr[i+1];
			nameArr[i+1] = temp;
		}
				 
	}
			 
	if(flag){
		break ;
	}
			 
}

System.out.println(Arrays.binarySearch(nameArr, 16));
//7
System.out.println(Arrays.toString(nameArr));
//[2, 3, 4, 6, 10, 12, 15, 16]
  1. 二维数组
    定义方法:

数据类型 [][] 数组名 = {{数组值},{数组值},{数组值},{数组值}};
数据类型 [] 数组名 [] = new 数据类型 [][]{{数组值},{数组值},{数组值},{数组值}} ;
数据类型 [] 数组名 [] = new 数据类型 [][];

int [][] age = {{1,2,3},{4},{5,6},{7,8,9}};
int [] age1 []  = new int [][] {{1,2,3},{4},{5,6},{7,8,9}};

int age [][] = new int[4][] ;//1维的长度是必须给出的
age[0] = new int[]{1,2,3};
age[1] = new int[]{4,5,6};
age[2] = new int[]{7,8,9};
age[3] = new int[]{10,11,12};

System.out.println(age[1][2]);//6
//遍历
for (int i = 0; i < age.length; i++) {
			
	for (int j = 0; j < age[i].length; j++) {	
		
		System.out.println(age[i][j]);		
	}			
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值