java中的数组

2.1 Java中的数组

2.1.1 数组

【装元素的容器】:装类型相同,存储空间连续的元素

int[] data = new int[空间大小];
int[] data = new int[]{元素,元素,元素…};
int[] data = {元素,元素,元素…};

得到某一个元素:
System.out.println(data[下标]);

得到数组的大小:

System.out.println(data.length);

如何遍历数组对象:

for + 下标
for(int x = 0;x < data.length;x++){
System.out.println(data[x]);
}

foreach
for(数据类型 x : 数组对象){
System.out.println(x);
}

public class Exec1{
public static void main(String[] args){
char[] r={'e','t','o','a','k'};
System.out.println(r[0]);
System.out.println(r.length);
for(int i=0;i<r.length;i++){//这里面的int x是从r数组里面下标
System.out.print(r[i]);//遍历输出
}
}}
//升级版for循环-》foreach (since from jdk5.0)
char[] r={'e','t','o','a','k'};
for(char x:r){//这里面的 char x是从r数组里面取出来的元素
System.out.println(x);//遍历输出
}

例子:拉灯:100个人分别进入100个房间,房间号可以整除人编号要拉一下灯,求第100个人拉完之后哪些灯亮着

//以人为出发点,1人分别去能被自己整除的房间拉一下灯
public class TurnOnLight{
	public static void main(String[] args){
	   boolean [] light=new boolean [100];
	   for(int i=1;i<=100;i++){//人
			for(int j=i;j<=100;j+=i){//房间号(直接走倍数,不用判断)
				//if(j%i==0){
					light[j-1]= !light[j-1];
				//}
				}
			}
			for(int a=0;a<light.length;a++){
				if(light[a]){
						System.out.println(a+1);	}	}
}}
//以房间为出发点,房间被进入奇数次灯是亮着的
public class TurnOnLight2{
	public static void main(String[] args){
	   boolean [] light=new boolean [100];
	   for(int i=1;i<=100;i++){//房间
	       int count=0;
			for(int j=1;j<=100;j++){//人编号
		   		if(i%j==0){
					count++;
			}
				}
			if(count%2==1){
				System.out.print(i+" ");	}
			}
}}

结果如图:
在这里插入图片描述

数组的复制:(先创建新数组)System.arraycopy(老数组对象,老数组的起始下标,目标数组,目标的下标,复制的长度)

​ 新数组对象 x =Arrays.copyOf(老数组对象,新数组的长度) 需要import java.util.*;

int[] data1={1,2,3};
int[] data2=new int[data1.length+1];
data2[3]=66;
System.arraycopy(data1,0,data2,0,3);
for(int x:data2){
System.out.print("新的"+x+" "); }
import java.util.*;
public class ArrayTest{
public static void main(String[] args){
int[] data={45,66,80,27,19,88};//不要复制27
//int[] temp=Arrays.copyOf(data,data.length-1);
//int[]  temp= new int[data.length-1];
System.arraycopy(data,4,data,3,2);
int[] temp=Arrays.copyOf(data,data.length-1);
for(int x:temp){
	System.out.println(x);
	}
}}
import java.util.*;
public class ArrayTest{
public static void main(String[] args){
int[] data={45,66,80,27,19,88};//不要复制27
System.arraycopy(data,4,data,3,2);
int[] temp=Arrays.copyOf(data,data.length-1);
for(int x:temp){
	System.out.println(x);
	}
}}

应用场景:

1)对数组进行不可逆操作,备份数组

2)数组太大/太小,创建新的数组,将老的数组重新添加进来

2.1.2 数组的排序

手动排序:冒泡排序

public class Maopao{
	public static void main(String[] args){
		int[] data = {20,12,45,43,32,17,97,87,56,34};
		for(int j=0;j<data.length-1;j++){//j为比较次数,i为下标
			for(int i=0;i<data.length-1-j;i++){//比较一次就可以将最大值取出,即可以少比较一次(效率更高)
						if(data[i]>data[i+1]){//升序排列
							data[i]=data[i] ^data[i+1];
							data[i+1]=data[i] ^data[i+1];
							data[i]=data[i] ^data[i+1];
							}
		       	}
			}
			for(int x:data){
				System.out.println(x);
			}
    }
}
public class ExecChar{
	public static void main(String[] args){
		char[] data = {'C','a','d','A','b','D','c','B'};
				//排序:A   a   B    b   C    c   D   d
		//ascii 65  97  66   98  67   99  68  100
		double [] asc = new double[data.length];
		for(int x = 0;x < data.length;x++){
			asc[x] = data[x] >=97 ? (data[x]-31.5): data[x];
	}
		for(int i=0;i<asc.length-1;i++){
			for(int j=0;j<asc.length-1-i;j++){
				if(asc[j]>asc[j+1]){
					double z =asc[j];
					asc[j]=asc[j+1];
					asc[j+1]=z;

					data[j] =(char)(data[j] ^ data[j+1]);
					data[j+1] =(char)(data[j] ^ data[j+1]);
					data[j] =(char)(data[j] ^ data[j+1]);
					}
}
			}
			for(char x:data){
				System.out.println(x);}
}
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值