一.数组
可以理解为容器,存放多个同类型的元素
开辟的空间连续+数据类型一致
数组是什么数据类型?
数据类型就基本数据类型和引用数据类型
所以 数组属于引用数据类型
1.根据数组维数创建
int[] data=new int[4];//开辟空间的大小
//[I@1f32e575
System.out.println(data);
//缺少数组维数 int[] data=new int[];
2.根据数组内容创建
//错误: 同时使用维表达式和初始化创建数组是非法的
//int[] data01=new int[4]{45,23,66,78};
int[] data01=new int[]{1,2,3,4};
//用的最多的是
int[] data01={1,2,3,4};
3.数组的下标/索引是从0开始的
//获取第一个空间的内容//数组的下标 0 1 2 3 索引
System.out.println(data[0]);//0
对数组某个位置进行赋值
data[1]=666;
4.获取数组的长度
System.out.println(data.length);
//数组长度 最后一个空间下标
//4 3
//5 4
//data.length data.length-1
int index=data.length;
5. 数组的遍历 普通for
遍历 数组 for+下标
//5.遍历 数组 for+下标
for(int index=0;index<data02.length;index++){
System.out.println(data02[index]);
}
6.foreach/forin遍历数组
//for(数据类型 名字:data){} for+下标实用性更强 foreach只能从前往后
/*for(从数组取出的每一个空间的内容:数组对象){
}*/
for(int x:data02){
System.out.println(x);
}
Exce1
public class Exec1{
public static void main(String[] args){
// 存放名字数组 Jack Andy Lee
String[] name={"Jack","Andy","Lee"};
//数组大小
int index=name.length;
//第二个空间存放的名字
System.out.println("第二个空间存放的名字 "+name[1]);
//第一个空间改为Tom
name[0]="Tom";
//遍历当前数组所有内容
for(int i=0;i<index;i++){
System.out.println("第"+i+"个空间存放的名字"+name[i]);
}
for(String str:name){
System.out.println(str);
}
}
}
Exce2
public class Exec2{
public static void main(String[] args){
int[] data={10,60,23,100,78};
int index=data.length;
//全班总分
int sum=0;
for(int i=0;i<index;i++){
sum+=data[i];
}
System.out.println("总分"+sum);
sum=0;
for(int i:data){
sum+=i;
}
System.out.println("foreach总分"+sum);
//打印不及格的分数
for(int i=0;i<index;i++){
if(data[i]<60){
System.out.println("不及格的分数"+data[i]);
}
}
//打印>=平均分的分数
int average=sum/data.length;
System.out.println("平均分"+average);
for(int i=0;i<index;i++){
if(data[i]>=average){
System.out.println(">=平均分"+data[i]);
}
}
//统计几个人低于平均分
int count=0;
for(int i=0;i<index;i++){
if(data[i]<average){
count++;
}
}
System.out.println(count+"个人低于平均分");
}
}
Exce3
import java.util.*;
public class Exec3{
public static void main(String[] args){
char[] data={99,'a','A','z',70};
int index=data.length;
System.out.println(Arrays.toString(data));
//获取空间的内容
for(char message:data){
System.out.print(message+" " );
}
System.out.println();
//统计大写字母
int count=0;
for(char message:data){
if(message>='A'&&message<='Z'){
count++;
}
}
System.out.println("大写字母有:"+count+"个");
//打印所有的小写字母
for(char message:data){
if(message>='a'&&message<='z'){
System.out.println("小写字母有:"+message);
}
}
//打印所有大写字母的下标
for(int i=0;i<index;i++){
if(data[i]>='A'&&data[i]<='Z'){
System.out.print("大写字母"+data[i]+"下标"+i+" ");
}
}
System.out.println();
}
}
总结:
数组的创建:给出维数||给定初始化内容
for+下标时 使用 for循环
普通遍历就使用foreach
只要...就 一般使用 while
二.数组复制
数组复制
System.arraycopy(1,2,3,4,5);
1:要复制的老数组对象
2:要复制的老数组的起始位置
3:要到的新数组对象
4:要复制到新数组的起始位置
5:复制的个数
import java.util.*;
public class TestArrayCopy1{
public static void main(String[] args){
int[] data={45,66,23,78};
//新开辟空间大小 data.length+1
int[] temp=new int[data.length+1];
temp[data.length]=787;
System.arraycopy(data,0,temp,0,data.length);
System.out.println(Arrays.toString(data));
System.out.println(Arrays.toString(temp));
}
}
实例:
import java.util.*;
//import java.util.*;
public class Exec6{
public static void main(String[] args){
int[] data={45,66,23,78};
//45 66 插入90
//45 90 66 23 78
//1.开辟空间
int[] temp=new int[data.length+1];
//2.复制data中的第一个元素-->temp
//[45][0][0][0][0]
System.arraycopy(data,0,temp,0,1);
//3.将data中剩余元素移动到temp中
System.arraycopy(data,1,temp,2,3);
//4.给第二个空间赋值90
temp[1]=90;
System.out.println(Arrays.toString(temp));
}
}
数组可以通过 System.arraycopy(1,2,3,4,5); 和Arrays.copyOf(1,2) 进行数组移动删除
import java.util.*;
public class TestArrayCopy2{
public static void main(String[] args){
int[] data={45,66,23,78};
// 0 1 2 3
//删除66
//45 23 78
//45,23,78,78
System.arraycopy(data,2,data,1,2);
//做到了删除元素66下面
data=Arrays.copyOf(data,data.length-1);
System.out.println(Arrays.toString(data));
//45 23 78
System.out.println(data.length);
//3
}
}
三.数组排序
冒泡排序 无需多言
根据个位数的大小进行排序哦
import java.util.*;
public class Exec07{
public static void main(String[] args){
int[] data={45,28,90,89,10};
for(int i=0;i<data.length-1;i++){
for(int j=0;j<data.length-1-i;j++){
if((data[j]%10)>(data[j+1]%10)){
int temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(data));
}
}
import java.util.*;
public class TestArraySort1{
public static void main(String[] args){
//45 28 90 89 10
int[] data={45,28,90,89,10};
for(int i=0;i<data.length-1;i++){// -1是为了解决越界问题
for(int j=0;j<data.length-1-i;j++){// -i是为了提高效率
if(data[j]>data[j+1]){
int temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(data));
}
}