数组

基本概念

概念

同一种数据类型的多个固定数量的数据放到一个容器里~

创建方式

	int[] arr1={1,2,3,4,5};
	char[] arr2=new char[2];
	boolean[] arr3=new boolean[]{false,ture,false,false,true,true,false};

常用功能

  • arr1[下标]——获取元素

  • arr1.length——获取长度

  • arr1[下标]=对应数据类型的值——给数组某个元素赋值

      char[] c1=new char[2];
      c1[0]='q';
      c1[1]='q';
      System.out.println(c1);
      //结果:qq
    
  • 自动类型转换存在于数组,即 long[] arr1中可以放 int short long类型的数据

      int a =1;
      byte b =2;
      short c=3;
      long[] arr1={a,b,c};
      //结果:不会报错,arr1中存放的是已经转换为long型的 a和b和c的值;(但a  b  c本身的值和类型都没有变,不会变成long)
    
  • 默认值

      char[] c1=new char[2];
      System.out.println(c1[0]);//默认空字符
      //空字符也有数据,数据内容就是空字符,占内存的)
      
      int[] i=new int[2];
      System.out.println(i[0]);//默认0
      
      boolean[] b=new boolean[2];
      System.out.println(b[0]);//默认False
      
      String[] s=new String[2];
      System.out.println(s[0]);//默认null
    
      Random r[]=new Random[2];
      System.out.println(r[0]);//默认null
      //默认null,代表空,所有引用数据类型的默认值都是空(无数据,不存在于内存);
      //random此时是个类型,不是个数值,没有调用random方法,只是个引用类型
      
      byte[] b1=new byte[2];
      System.out.println(b1[0]);//默认0
      
      float[] f=new float[2];
      System.out.println(f[0]);//默认0.0
      
      double[] d=new double[2];
      System.out.println(d[0]);//默认0.0
    

排序

选择排序

找最大/小值放在最前;在剩余数字中继续重复该动作;

public static void main(String[] args) {
		int[] arr={122,13,24,2,21,3157,468,986};
		System.out.println(Arrays.toString(s(arr)));
	}
	
	public static int[] s(int[] arr) {
		for(int i=0;i<arr.length-1;i++){
			int min=i;
			for(int j=i+1;j<=arr.length-1;j++){
				if(arr[j]<arr[min])
					min=j;
				}
			int t=arr[i];
			arr[i]=arr[min];
			arr[min]=t;
		}
		return arr;
	}
  • 必须使用下标,不能直接交换元素!
  • 注意内层循环的起始位置(j=i+1),否则每次都与最前面的交换,最前面在第一次循环后就是已经计算出来的最小值了,结果会出错!!!

冒泡排序

两两比较,将较大/较小的值向后移动,直到移动到最后;在剩下的数字中重复以上动作;

public static void main(String[] args) {
		int[] arr={1,2,4,1,34,2};
		System.out.println(Arrays.toString(f2(arr)));
	}
	public static int[] f2(int[] arr) {
		for(int i=0;i<arr.length-1;i++){
			for(int j=0;j<arr.length-i-1;j++){
				if(arr[j]>arr[j+1]){
					int t=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=t;
				}
			}
		}
		return arr;
	}
  • 注意内层循环的起始位置(j=i+1),否则造成冗余的循环过程!!!

二维数组

概念

以(一维)数组为元素的数组(嵌套的概念)~

创建方式

*数据类型[][] 数组名=new 数据类型[m][n];

*数据类型[][] 数组名={{元素1},{元素1,元素2},{元素1,元素2,元素3...},{},{元素1,元素2...}...};

*数据类型[][] 数组名=new 数据类型[m][];   
//不推荐!!!这种方式可以创建但不能使用,必须对其中每一个一维数组再进行单独创建才能使用;
如: 
int[][] crr=new int[3][];
crr[0]=new int[3];   //不能使用crr[0]={1,2,3}的形式,必须使用new关键字!
crr[1]=new int[2];
crr[2]=new int[5];

常用功能

  • arr[下标]——获取一维数组
  • arr[下标][下标]——获取一维数组中的具体元素
  • arr.length——获取二维数组长度
  • arr[下标].length——获取内部的一维数组长度
    • arr1[下标][下标]=对应数据类型的值——给二维数组中的一维数组中的某个元素赋值

可变参数

  • 写法int… a(写在参数列表里)

  • 实际传的参数个数可变

  • 可变参数必须写在参数列表最后一位,其前面可以有其他类型的其他形参;(如果出现在前面或中间,由于其可以接收任意量的参数值,会导致后面的形参接收不到参数!)

  • 传的参数本质上会被打包成一个该数据类型的数组(即便没有参数也可以,数组长度为0)

      public static void main(String[] args) {
      	f1(1,2,3,4,5);
      	f1(1,2);
      	f1();
      	//以上都可以
      }
      public static void f1(int... a) {
      }
    

待学习:
数组的地址
空指针异常

for each

  • 没有下标的概念

  • 只能遍历容器(数组、集合等)

  • 自动查找对应数据类型的,从前到后遍历完毕,每读到一个,执行一次内部语句。

      for(数据类型 变量:容器){
      	语句
      }
      for(int a:arr){
      	System.out.println(a);
      }
    
  • 遍历二维数组

      	int[][] arr=new int[2][3];
      	for(int[] brr:arr){
      		for(int b:brr){
      			System.out.println(b);
      		}
      	}
    

Arrays 工具类

“容器s”即容器的工具类:如arrays是数组的工具类;collections是集合的工具类;

toString

sort

可以按字典顺序排序字母
可以排序数字

binarySearch 二分搜索法

只能对不重复且升序排列的数组查找,查到后返回其下标

binarySearch(数组名,要查找的值)

*如果要查找的值不存在,会返回 其 如果能出现,其按顺序应该出

copyOfRange

copyOfRange (数组名,起始下标,结束下标)
//包含开始下标,不含结束下标
  • 结束下标如果超过数组长度,将会用默认值 0自动补位:
	int[] arr={1,2,3,4,5,6}
	brr=copyOfRange(arr,4,10)
	System.out.ptint(Arrays.toString(brr));
	//结果是 [5,6,0,0,0,0,0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值