Java数组

一维数组

数组作为对象允许使用new关键词进行内存分配。在使用数组之前,必须首先定义数组变量所属的类型。

一维数组的创建有两种形式。

先声明,再用new关键词进行内存分配

一维数组有下列两种形式。

数组元素类型     数组名字【】;

数组元素类型【】  数组名字;

分配内存空间

数组名=new    数组元素的类型

分配内存同时设置初始值

数组名=new   数组元素的类型【】{值1,值2,....,值3}

使用new关键字为数组分配内存时,整型数组中各个元素的初始值都为0.

数组元素赋值

数组【索引】=值;

数组名【】

 
public class GetDay {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int day[]=new int[] {31,28,31,30,31,30,31,31,30,31,30,31};//创建并初始化一维数组
        //for循环遍历数组
        for(int i=0;i<12;i++){//利用循环将信息输出。 如改成”i<13“数组下标越界,会出现报错
            System.out.println((i+1)+"月有"+day[i]+"天");//输出每月的天数
        }
    }
 
}

 
public class GetDay {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int day[]=new int[] {31,28,31,30,31,30,31,31,30,31,30,31};//创建并初始化一维数组
        //for循环遍历数组
        for(int i=0;i<day.length;i++){//利用循环将信息输出。 加length避免下标越界
            System.out.println((i+1)+"月有"+day[i]+"天");//输出每月的天数
        }
    }
 
}

 运行结果如下:

public class Foreach {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int arr[]= {5,13,96};//一维整型数组
        System.out.println("一维数组中的元素分别是:");
        //foreach循环遍历数组,避免下标越界
        //x的类型与arr元素的类型相同。for循环依次取出arr中的值并赋给x
        for(int temp:arr) {
            System.out.println(temp);//输出遍历出的元素值
            }
    }
 
}

二维数组

如果一组数组中的各个元素任然是一个数组,那么它就是一个二维数组,二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表元素所在的列

二维数组可以看作是特殊的一维数组,因此二维数组的创建同样有两种方式。

1.先声明,再用new关键字进行内存

分配元素的类型    数组名字【】【】;

数组元素的类型【】【】   数组名字;

2.内存分配

二维数组分配内存

new  数组元素的类型【行数】【列数】

二维数组分配内存同时设置初始值

数组名= new   数组元素的类型【】【】{{值1,值2,.....},{值1,值2.....},.............,{值1,值2......}};

初始化二维数组后,要明确数值的下标都是从0开始。

 
public class Matrix {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int a[][]=new int[3][4];//定义二维数组
        for (int i=0;i<a.length;i++){
            for(int j=0;j<a[i].length;j++) {//循环遍历数组中的每一个元素
        
        System.out.print(a[i][j]);//将数组中的元素输出
        }
            System.out.println();//输出空格
    }
 
}
}

 运行结果如下:

数组的基础操作

遍历数组

遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现。

遍历二维数组需使用双层for循环,通过数组的length属性可获得数组长度。

在遍历数组时,使用foreach语句可能会更简单。

 
public class Tautog {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int arr2[][]= {{4,3},{1,2}};//定义二维数组
        System.out.println("数组中的元素是:");//提示信息
        int i=0;//外层循环计数器变量
        for(int x[]:arr2) {//外层循环变量为一维数组
            i++;//外层计数器递增
            int j=0;//内层循环计数器变量
            for(int e:x) {//循环遍历每一个数组元素
                j++;//内层计数器递增
                if(i==arr2.length&&j==x.length) {//判断变量是二维数组的最后一个元素
                    System.out.print(e);//输出二维数组的最后一个元素
                }else//如果不是二维数组的最后一个元素
                    System.out.print(e+"、");//输出信息
            }
        }
    }
 
}

 运行结果如下:

 替换数组

数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成对任意类型的数组元素的替换。fill()方法有两种参数类型:

替换数组

Arrays.fill(数组名,值);

替换数组部分元素:前改后不改

Arrays.fill(数组名,前索引,后索引,值);索引=下标

填充替换数组元素

1.fill(int【】a,int value)

import java.util.Arrays;//导入java.util.Arrays类
 
public class Swap {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int arr[]=new int[5];//创建int型数组
        Arrays.fill(arr,8);//使用同一个值对数组进行填充
        for(int i=0;i<arr.length;i++) {//遍历循环数组中的元素
            System.out.println("第"+i+"个元素是:"+arr[i]);//将数组中的元素依次输出
        }
    }
 
}

 运行结果如下:

 2.fill(int【】a,int  fromlndex,int  tolndex,int  value)

该方法将指定的int值分配给int型数组指定范围中的每个元素。填充的范围从索引fromlndex(包括)一直到索引tolndex(不包括)。如果fromlndex=tolndex,则填充范围为空。

import java.util.Arrays;//导入java.util.Arrays类
 
public class Displace {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int arr[]=new int[] {45,12,2,10};//定义并初始化int型数组arr
        Arrays.fill(arr,1,2,8);//使用fill()方法替换数组指定范围内的元素
        for(int i=0;i<arr.length;i++) {//循环遍历数组中的元素
        System.out.println("第"+i+"个元素是:"+arr[i]);//将数组中的每个元素输出
    }
 
}
}

 运行结果如下:

 

 对数组进行排序

通过Arrays类的静态方法sort()可以实现对数组的排序。sort()方法提供了多种重载形式,可对任意类型的数组进行升序排序。语法如下:

Arrays.sort(object)

import java.util.Arrays;//导入java.util.Arrays类
 
public class Taxis {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int arr[]=new int[] {23,42,12,8};//声明数组
        Arrays.sort(arr);//将数组进行排序
        for(int i=0;i<arr.length;i++) {//循环遍历排序后的数组
            System.out.println(arr[i]);//将排序后数组中的各个元素输出
        }
    }
 
}

 运行结果如下:

 复制数组

1.copyOf()方法

该方法提供了多种重载形式,用于满足不同类型数组的复制。语法如下:

copyOf(arr,int newlength)

复制数组:空位补0,溢出去掉

新数组名=Arrays.copOf(旧数组名,新数组长度);

import java.util.Arrays;//导入java.util.Arrays类
 
public class Cope {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int arr[]=new int[] {23,42,12};//定义数组
        int newarr[]=Arrays.copyOf(arr,5);//复制数组arr
        for(int i=0;i<newarr.length;i++) {//循环遍历复制后的新数组
            System.out.println(newarr[i]);//将新数组输出
        }
    }
 
}

 代码运行结果如下:

 2.copyOfRange()方法

复制数组部分元素:前在后不在

新数组名=Arrays.copysOfRange(旧数组名,前索引,后索引);

import java.util.Arrays;//导入java.util.Arrays类
 
public class Repeat {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int arr[]=new int[] {23,42,12,84,10};//定义数组
        int newarr[]=Arrays.copyOfRange(arr,0,3);//复制数组
        for (int i=0;i<newarr.length;i++) {//循环遍历复制后的新数组
            System.out.println(newarr[i]);//将新数组中的每个元素输出
        }
    }
 
}

 运行结果如下:

 查询数组

Arrays类的binarySearch()方法,可使用二分搜索法来搜索指定数组,以获得指定对象。该方法返回要搜索元素的索引值。binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。binarySearch()方法有两种参数类型。

1.binarySearch(Object【】a,Object   key)

语法如下:

查询数组:先排序再查询

索引=Arrays.binrySearch(数组名,值);

import java.util.Arrays;//导入java.util.Arrays类
 
public class Reference {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        int ia[]=new int[] {1,8,9,4,5};//定义int型数组ia
        Arrays.sort(ia);//将数组进行排序
        int index=Arrays.binarySearch(ia,4);//查找数组ia中元素4的索引位置
        System.out.println("4的索引位置是:"+index);//将索引输出
    }
 
}

运行结果如下:

2、binarySearch(Object[] a,int fromlndex,int tolndex,Objrct key)

该方法在指定的范围内检索某一元素。语法如下:

查询数组元素:先排序再查询,前含后不含

索引=Arrays.binrySearch(数组名,前索引,后索引,元素)

import java.util.Arrays;//导入java.util.Arrays类
 
public class Rakel {//创建类
 
    public static void main(String[] args) {//主方法
        // TODO Auto-generated method stub
        String str[]=new String[] {"ab","cd","ef","yz"};//定义String型数组str
        Arrays.sort(str);//将数组进行排序
        int index=Arrays.binarySearch(str,0,2,"cd");//在指定范围内搜索元素“cd”的索引位置
        System.out.println("cd的索引位置是:"+index);//将索引输出
    }
 
}

 运行结果如下:

数组排序算法

1.冒泡排序

冒泡排序是最常用的数组排序算法之一,它排序数组元素的过程总是将较小的数往前放、较大的数往后放,类似水中气泡往上升的动作,所以称为冒泡排序。

public class BubbleSort {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] array= {63,4,24,1,3,15};//创建一个数组,元素是乱序的
        BubbleSort sorter= new BubbleSort();//创建冒泡排序类的对象
        sorter.sort(array);//调用排序方法,对数组排序
    }
    public void sort(int[] array) {
        for (int i=1;i<array.length;i++) {
            //比较相邻两个元素,比较的元素往后冒泡
            for(int j=0;j<array.length-i;j++) {
                if(array[j]>array[j+1]) {
                    int temp=array[j];//把第一个元素值保存到临时变量中
                    array[j]=array[j+1];//把第二个元素值保存到第一个元素单元中
                    array[j+1]=temp;//把临时变量(第一个元素原值)保存到第二个元素单元中
                }
            }
        }
        showArray(array);//输出冒泡排序后的数组元素
    }
    private void showArray(int[] array) {
        // TODO Auto-generated method stub
        for(int i:array) {//遍历数组
            System.out.print(">"+i);//输出每个数组元素值
            
        }
        System.out.println();
    }
 
}

代码运行结果如下:

 2.直接选择排序

直接选择排序属于选择排序的一种,它的排序速度要比冒泡排序快一些,也是常用的排序算法

public class SelectSort{
 public static void main(String[] args) {
  int[] array= {63,4,24,1,3,15};//创建一个数组,元素是乱序的
  SelectSort sorter=new SelectSort();//创建直接排序类的对象
  sorter.sort(array);//调用排序对象方法,对数组排序
 }
 public void sort(int[] array) {
  int index;
  for(int i=1;i<=array.length;i++) {
   index=0;
  for(int j=1;j<=array.length-i;j++) {
   if(array[j]>array[index]) {
    index=j;
   }
  }//交换在位置array.length-i和inde(最大值)上的两个数
   int temp=array[array.length-i];//把第一个元素值保存到临时变量中
   array[array.length-i]=array[index];//把第二个元素值保存到第一个元素单元中
   array[index]=temp;//把临时变量(第一个元素原值)保存到第二个元素单元中
 }
  showArray(array);//输出直接选择排序后的数组元素
}
 public void showArray(int[] array) {
  for(int i:array) {//遍历数组
   System.out.print(">"+i);//输出每个数组元素值
  }
  System.out.println();
 }
}

运行结果如下:

反转排序

把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换

public class ReverseSort {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int []array = {10,20,30,40,50,60};//创建一个数组
		ReverseSort sorter = new ReverseSort();//创建反转排序类的对象
		sorter.sort(array);//调用排序对象方法,将数组反转
	}
	
	public void sort(int[] array) {
		System.out.println("数组原有内容:");
		showArray(array);//输出排序前的数组元素
		int temp;
		int len = array.length;
		for (int i = 0;i<len/2;i++) {
			temp = array[i];
			array[i] = array[len-1-i];
			array[len-1-i] = temp;
		}
		System.out.println("数组反转后内容:");
		showArray(array);//输出排序后的数组元素
	}
	
	public void showArray(int[]array) {
		for(int i :array) {//遍历数组
			System.out.print("\t"+i);//输出每个数组元素
		}
		System.out.println();
	}

}

运行结果如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值