一维数组
数组是存储数据的空间(装数据的容器),数组中可以存储多个(具体多少个由你来定义)相同类型的数据,内存会给这个数组分配一个内存地址。
1、数组声明:
数据类型[] 数组名; 或者 数据类型 数组名[]
2、分配空间(告诉数组里能够存储数据的个数):
数组名 = new 数据类型[数组长度];
nums1 = new byte[3];
nums2 = new short[4];
nums3 = new int[2];
nums4 = new long[5];
nums5 = new float[6];
nums6 = new double[3];
chas1 = new char[3];
bools1 = new boolean[4];
strs1 = new String[3];
3、赋值:将数据存储在数组的指定位置,位置通过下标来控制,下标从0开始:数组名[下标] = 数据;
nums3[0] = 10;
nums3[1] = 20;
注意:nums3[2] = 100;ArrayIndexOutOfBoundsException 数组下标越界异常,nums3数组的长度为2,下标从0-1,下标不可能超过1,所以你写2,就越界
4、操作数组中的数据:通过数组名[下标]来操作
System.out.println(nums3[0]);
nums3[0]+=20;
System.out.println(nums3[0]);
System.out.println(nums3[1]);
5、声明数组和分配空间合并写:
数据类型[] 数组名 = new 数据类型[数组长度]; 或者 数据类型 数组名[] = new 数据类型[数组长度];
6、声明数组、分配空间、赋值合并一步写:
数据类型[] 数组名 = new 数据类型[]{数据1,数据2,...,数据n}; 或者 数据类型 数组名[] = new 数据类型[]{数据1,数据2,...,数据n};
注意:{}前面的[]中不能写数组长度
char[] chas1 = new char[]{'你','好'};
boolean[] bools1 = new boolean[]{false,false,true,false};
7、声明数组、分配空间、赋值合并写可以简写:
数据类型[] 数组名 = {数据1,数据2,...,数据n}; 或者 数据类型 数组名[] = {数据1,数据2,...,数据n};
int[] nums = {10,52,46,78,91,66};
double[] nums2 = {12.5,56.5,78,16.55,9};
8、直接输出数组名称,输出的是数组的内存地址值
System.out.println(nums);
运行结果:[I@7910769b
9、获取数组中元素的个数:数组名.length
int size =nums.length;
10、数组遍历可以用增强for循环:
语法结构:
for(数据类型 变量名:数组名){
操作变量名
}
执行规律:
将数组中的元素按照下标顺序依次取出来存储在变量中,通过操作变量就可以操作数组中的元素 。
11、输出数组中的最大值或者最小值
思想:
1)假设数组中的第一个元素为最大值
2)依次将数组中的元素取出来与这个假设的最大值进行比较,如果取出来的元素比这个假设的最大值大,那么这个取出来的值暂时成为新的最大值
3)如果取出来的元素比假设的最大值小,就向后继续进行比较
练习:
// 输出数组中的最大值或者最小值
int nums[]={23,26,25,97,58,78,95,43,12};
// 假设最大值为列表的第一个元素
int max=nums[0];
int min=nums[0];
int temp;//用来暂存数据完成两个数据数值的交换
for(int i=0;i<nums.length;i++){
if(nums[i]>max){
temp=max;//数据交换
max=nums[i];
nums[i]=temp;
}
}
System.out.println("数组的最大值是:"+max);
for(int i=0;i<nums.length;i++){
if(nums[i]<min){
temp=min;//数据交换
min=nums[i];
nums[i]=temp;
}
}
System.out.println("数组的最小值是:"+min);
12、Arrays中方法的用法:
(1) boolean equals(数组名1,数组名2):比较两个数组中的元素是否完全一致(比较对应下面上的元素是否相同),如果所有元素值都相同,返回true,否则返回false。
boolean result1 =Arrays.equals(nums1, nums2);
System.out.println("两个数组完全相同:"+result1);
(2) String toString(数组名):将数组转换成字符串输出。
int[] nums3 = {12,25,96,43,11,56};
String result2 =Arrays.toString(nums3);
System.out.println(result2);//"[12, 25, 96, 43, 11, 56]"
(3)void fill(数组名,数据):将数组中所有的元素值替换为你指定数据
String[] strs ={"hello","java,","html","js"};
Arrays.fill(strs, "qwert");
System.out.println(Arrays.toString(strs));
(4)数据类型[] copyOf(数组名,长度):赋值指定数组中指定长度的元素,生成一个新的对应类型的数组,当复制的长度小于等于被复制数组长度的时候,取数组里的元素,如果复制的长度大于被复制的数组长度,不够的元素用默认值补充
char[] chs = {'q','w','e','r','t','y','u'};
char[] copyChs=Arrays.copyOf(chs, 9);
System.out.println(Arrays.toString(copyChs));
(5)数据类型[] copyOfRange(数组名,起始下标,结束下标):复制指定数组中起始下标到结束下标之间的元素,注意,包括起始下标的元素,不包括结束下标的元素
char[] copyChs2=Arrays.copyOfRange(chs, 2, 4);
System.out.println(Arrays.toString(copyChs2));
(6)int binarySearch(int[] a,int key)使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过 sort(int[]) 方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。 如果你要查找的元素值不在数组中,会返回一个负值
int[] nums4 = {11,56,76,9,32,42,9,55};
Arrays.sort(nums4);
System.out.println(Arrays.toString(nums4));
int index =Arrays.binarySearch(nums4, 11);
System.out.println("你要找的元素的下标:"+index);