java一维数组基础

**java一维数组基础应用**

import java.util.Arrays;
/**数组是引用数据类型
 * 数组下标越界异常(运行时异常)
 * java.long.ArrayIndexOutOfBoundsException
 * 空指针异常
 * java.long.NullPointerException
 * @author sashay
 *
 */
public class Test1 {
	public static void main(String[] args) {
		// 定义一维数组,静态初始化
        int arr3[]=new int[]{1,2,3};//1
        int arr4[]={1,2,3};//2
        //一维数组的动态初始化
        int[] arr1=new int[3];//3
        int arr2[]=new int[3];//4
        arr1[0]=1;
        arr1[1]=3;
        arr1[2]=2;
        //拷贝一个数组arr1
        //方式一
        int arr8[]=Arrays.copyOf(arr1, arr1.length);
        //方式二
        int arr11[]=arr1.clone();
        //方式三
        int[] arr12=new int[arr1.length];
        System.arraycopy(arr1, 0, arr12, 0, arr1.length);
        //方式四
        int[] arr13=new int[arr1.length];
        for (int i = 0; i < arr1.length; i++) {
			arr13[i]=arr1[i];
		}
        //拷贝数组的一部分
        int arr9[]=Arrays.copyOfRange(arr1, 0, 1);
        //判断两个数组是否相同
        if(Arrays.equals(arr1, arr8)){
        	System.out.println("两个数组相同");
        }else{
        	System.out.println("两个数组不同");
        }
        //数组的升序排序
        Arrays.sort(arr1);
        //数组的输出
        System.out.println(Arrays.toString(arr1));
        //将数组arr1的所有元素都替换成-1
        Arrays.fill(arr1, 0, 1, -1);
        //把数组arr1转换成集合
        Arrays.asList(arr1);
        //一维数组遍历1 forEach方式
        for(int i:arr1){
        	System.out.print(i+" ");
        }
        //---------------------------
        //一维数组遍历2 普通for循环
        for (int i = 0; i < arr1.length-1; i++) {
			System.out.println(arr1[i]);
		}
        //一维数组遍历3 通过toString方法,把数组中的元素转换为字符串输出
        System.out.println(Arrays.toString(arr1));
        //数组元素的反序输出
        for (int i=arr1.length-1;i>=0; i--) {
			System.out.println(arr1[i]);
		}
        //从大到小排序 1
        int tmp=0;
        for (int i = 0; i < arr1.length-1; i++) {
			for (int j = 0; j < arr1.length-i-1; j++) {
				if(arr1[j+1]>arr1[j]){
					tmp=arr1[j+1];
					arr1[j+1]=arr1[j];
					arr1[j]=tmp;
				}
			}
		}
        //输出
        System.out.println(Arrays.toString(arr1));
        //-----------------------------------------------
        //从大到小排序 2
        Arrays.sort(arr1);
        for (int i=arr1.length-1;i>=0; i--) {
			System.out.println(arr1[i]);
		}
        System.out.println("========================");
        //求最大值
        int max=arr1[0];
        for (int i = 1; i < arr1.length-1; i++) {
        	 if(arr1[i]>max){
        		 max=arr1[i];
        	 }
        }
        System.out.println(arr1[max]);
        //========================================
        //快速排序
        int[] arr10={1,2,4,6,3,5,3,5};
        //快速排序(升序排序)
        quickSort(arr10,0,arr10.length-1);
        System.out.println(Arrays.toString(arr10));
        //折半查找(只能对排好的数组使用这个查找方法),12是在数组arr10待查找的数
        int pos=halfSrch(arr10,12);
        System.out.println("12的位置是"+pos);
	}
	
	private static int halfSrch(int[] arr10, int num) {
		//设置标志位min,max的起始位置,
		int min=0,max1=arr10.length-1,mid=0;
		while(min<=max1){
			//求mid中间数
			mid=(min+max1)/2;
			//判断
			if(arr10[mid]<num){
				min=mid+1;
			}else if(arr10[mid]>num){
				max1=mid-1;
			}else{
				return mid;
			}
		}
		//没找到的话返回-1
		return -1;
	}

	private static void quickSort(int[] arr10, int low, int high) {
		// 声明两个变量
		int i1=low;
		int j1=high;
		
		while(i1>j1){
			return;
		}
		//设置一个基准数,一般是数组的第一位
		int tmp=arr10[low];
		//i从左向右搜索,遇到比它大的数就停下来
		//j从右向左搜索,遇到比比它小的数就停下来,然后交换i和j所指向的值
		int t=0;
		while(i1<j1){
			//j开始搜索
			while(tmp<=arr10[j1]&&i1<j1){
			j1--;	
			}
			//i开始搜索
			while(tmp>=arr10[i1]&&i1<j1){
			i1++;
			}
			//判断,交换
			if(i1<j1){
				t=arr10[i1];
				arr10[i1]=arr10[j1];
				arr10[j1]=t;
				
			}
		}
		//判断,折半,先左边后右边
		if(i1==j1){
			arr10[low]=arr10[i1];
			arr10[i1]=tmp;
		}
		//将前半部分快速排序
		quickSort(arr10,low,i1-1);
		//将后半部分快速排序
		quickSort(arr10,i1+1,high);
	}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值