Java数组常见应用详解【创建、遍历、排序、查找】
本文实例讲述了Java数组常见应用。分享给大家供大家参考,具体如下:
双重for循环
外循环控制行,内循环控制列。
//乘法表
for(inti=1;i<=9;i++){
for(intj=1;j<=i;j++){
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();
}
DecimalFormat
#:一个数字
0:一个数字,不够位数用0补位
DecimalFormatf=newDecimalFormat("###.##");
DecimalFormatf=newDecimalFormat("000.00000");
System.out.println(sum);
System.out.println(f.format(sum));
System.out.println(f.format(34.567));
break
用在switch和循环中。
用在单层循环中,用来结束循环。
continue
用在循环中。
作用结束本次循环进行下一次循环条件判断。
对于双重循环,可以自定义一个标签,break或continue到标签处。
一维数组
Java语言中提供的数组是用来存储固定大小的同类型元素。
声明数组
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
int[]arr;//声明数组,告诉计算机我要存储一组整数(推荐) 或 //intarr[];
intx1,x2,x3;//声明了3个int类型的变量 int[]n1,n2,n3;//声明了3个数组 intnum1[],num2,num3;//声明了一个int类型的数组num1,两个Int类型的变量。
创建数组
arr=newint[6];//创建一个数组,计算机在内存中分配6个空间,并初始化
数组的元素是通过索引访问的。数组索引从0开始,所以索引值从0到arr.length-1。
数组初始化
//动态初始化:我们制定长度,系统赋值。
int[]arr=newint[5];//0
//初始值
//整数:0小数:0.0布尔:falsechar:\0000
//String:null
//静态初始化:我们赋值,系统分配长度(arr2.length)
int[]arr2={11,22,33};
赋值数组
arr[2]=33;
栈stack
- 是作为构思算法的辅助工具,不是完全的数据存储工具。是插入和删除操作被限制在表的线性表。
- 只能从栈顶入栈,也只能从栈顶出站
- 是一种后进先出的结构
遍历数组
普通for循环
publicclassTestArray{
publicstaticvoidmain(String[]args){
double[]myList={1.9,2.9,3.4,3.5};
//打印所有数组元素
for(inti=0;imax)max=myList[i];
}
System.out.println("Maxis"+max);
}
}
增强for循环
publicclassTestArray{
publicstaticvoidmain(String[]args){
double[]myList={1.9,2.9,3.4,3.5};
//打印所有数组元素
for(doubleelement:myList){
System.out.println(element);
}
}
}
增强for循环的特点:
【1】简洁
【2】不能制定范围访问,只能访问全部
【3】不能反转输出,只能正序访问
【4】不能修改数组元素的值
数组排序
冒泡排序
packageday4;
publicclassDemo12{
publicstaticvoidmain(String[]args){
//冒泡排序
int[]arr={34,1,78,9,43};
inttemp;
for(inti=0;iarr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(intn:arr){
System.out.println(n);
}
}
}
选择排序
packageday4;
importjava.util.Arrays;
publicclassDemo13{
publicstaticvoidmain(String[]args){
//选择排序
int[]arr={5,12,3,78,345};
inttemp;
for(inti=0;iarr[j]){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for(intn:arr){
System.out.println(n);
}
//System.out.println(Arrays.toString(arr));
}
}
数组查找方法
普通查找方法(效率比较低)
publicclassArrayTest{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
int[]arr={4,6,8,33,66,44,99,54};
intnum=searchKey(arr,66);
System.out.println(num);
}
//查找一个元素在数组中的第一次出现的位置
publicstaticintsearchKey(int[]arr,intkey){
for(inti=0;i
二分查找法(效率比较高)
publicclassbinarySearch{
publicstaticvoidmain(String[]args){
int[]arr={9,12,15,24,36,41,59,68};
intnum=searchArray(arr,12);
System.out.println(num);
}
//二分查找。前天:数组必须是有序的。
/*
*思路:
*1.通过角标先获取中间角标上的元素
*2.让该元素和要找的数据比较。
*3.如果要找的数大了,缩小范围,要找的范围应该是中间的角标+1---尾角标
*如果要找的数效率,要找的范围头角标---中间角标-1。
*4.不断如此重复,就可以找到元素对应的角标。
**/
publicstaticintsearchArray(int[]arr,intkey){
intmax,min,mid;
min=0;
max=arr.length-1;
mid=(min+max)>>1;
while(arr[mid]!=key){
if(key>arr[mid]){
min=mid+1;
}else{
max=mid-1;
}
//判断元素是否存在。
if(max>1;
}
returnmid;
}
}
publicclassArrayTest1{
publicstaticvoidmain(String[]args){
int[]arr={9,12,15,24,36,41,59,68};
intnum=binarySearch(arr,44);
System.out.println(num);
}
//二分查找。前天:数组必须是有序的。
/*
*思路:
*1.通过角标先获取中间角标上的元素
*2.让该元素和要找的数据比较。
*3.如果要找的数大了,缩小范围,要找的范围应该是中间的角标+1---尾角标
*如果要找的数效率,要找的范围头角标---中间角标-1。
*4.不断如此重复,就可以找到元素对应的角标。
**/
publicstaticintbinarySearch(int[]arr,intkey){
//定义单个变量,记录头角标,尾角标,中间角标
intmax,min,mid;
min=0;
max=arr.length-1;
while(min<=max){
mid=(min+max)>>1;
if(key>arr[mid]){
min=mid+1;
}elseif(key
数组的复制
packagecn.java.study;
importjava.util.Arrays;
publicclassDemo5{
publicstaticvoidmain(String[]args){
int[]arr1={1,4,6,83,45};
int[]arr2=newint[arr1.length];
//源数组源数组起始位置目标数组目标数组起始位置复制长度
System.arraycopy(arr1,1,arr2,2,3);
System.out.println(Arrays.toString(arr2));
}
}
常用API之Arrays类
packagecn.java.study;
//工具类
importjava.util.Arrays;
publicclassDemo5{
publicstaticvoidmain(String[]args){
//Arrays
int[]arr={1,4,7,434,232,55};
//将数组转换成字符串
System.out.println(Arrays.toString(arr));
//对数组进行升序排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//排序数组名排序数组元素开始位置排序数组元素结束位置(实际上,取到终止位置减一)[起始位置,终止位置)
Arrays.sort(arr,2,4);
System.out.println(Arrays.toString(arr));
//多核处理器下并行操作使用
Arrays.parallelSort(arr);
//二分查找下标,数组查找的数字,返回的是插入点,没有的话返回的是负的插入点减一的值
System.out.println(Arrays.binarySearch(arr,8));
//数组比较:元素的个数和对应位置的数组元素相同
int[]arr1={1,2,5};
int[]arr2={1,2,5};
System.out.println(Arrays.equals(arr1,arr2));
//数组的填充,将数组中所有的元素替换为666
Arrays.fill(arr,666);
System.out.println(Arrays.toString(arr));
//数组的复制,返回的是一个数组,(要复制的数组,几个元素)
int[]arr3=Arrays.copyOf(arr1,2);
System.out.println(Arrays.toString(arr3));
}
}
二维数组
格式1:
int[][]arr=newint[3][2];
- 定义了名称为arr的二位数组
- 二维数组中有3个一维数组
- 每一个一维数组中有2个元素
- 一维数组的名称分别为arr[0],arr[1],arr[2]
- 给第一个一维数组1角标位赋值为666的写法是:arr[0][1]=666;
System.out.println(arr);//[[Ie6f7d2二位数组实体e6f7d2是哈希值,[是数组,[[二位数组
格式2:
int[][]arr=newint[3][];
arr[0]=newint[3];
arr[1]=newint[1];
arr[2]=newint[2];
更多关于java相关内容感兴趣的读者可查看本站专题:《Java数组操作技巧总结》、《Java字符与字符串操作技巧总结》、《Java数学运算技巧总结》、《Java数据结构与算法教程》及《Java操作DOM节点技巧总结》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。