五、Java 数组、二维数组

1、数组的定义
2、内存结构
3、数组的特性
4、数组的遍历
5、数组的排序
6、数组的copy
7、移除数组中的一个元素
8、二维数组

1、数组的定义

 什么是数组: 同一类型数据的集合,数组,其实就是一个容器中存放了许多个同类元素,这些元素
 可以从0开始标号,方便使用各种查询和操作
 
 定义
 
 元素类型 [] 数组名 =new 元素类型[元素个数]
 // int  [] a =new int [5]  //定义了一个可以存放5个整数的数组
 ? a 是什么类型? 引用类型中的数组类型
 
 元素类型 [] 数组名= 元素类型[] {元素一,元素二,元素三....}
 int [] x=new int [100]
 int [] x={3,5,7}  //这种操作,必须在声明的时候直按赋值,不能照下面这样写:
		 	int [] x ;
		 	x={5,6,7}
		 	
		 	或 
		 	int [] x=new int [3];
		 	x={3,4};
		 	
 int [5] x={4,5,6};  //不行
 int x [5] ={4,5,6}; //不行
 int [] x=new int [3]{1,3,5} //不行
 
 int  [] x=new int [100];
 int sum=0;
 for(int i=0;i<100;i++)
 {
 		System.out.println(x[i]); //全是零
 }

2、内存结构

	java程序运行的时候,要在内存中分配空间,为了提高运算效率,java对内存空间进行了不同区域的划分,	
	每一片区域,都有特定的处理数据方式和内存管理方式
	
	--- 栈内存
		  用于存储局部变量,当数据用完,占用的空间就释放
		  当函数运行的时候,这个函数会在内存中申请一块空间,以后这个函数中声明的变量,都会分配到这块空间中的内存
		  函数执行以后,函数分配到的空间就会被回收,里面了变量也会消失
	
	--- 堆内存
			数组和对象,通过new创建出来的实体都放在堆内存中
			每一个实体,都有一个单一的内存地址
			实体中(new 出来的东西) 中的变量都有默认的初始化值
			当实体不再被引用的时候,会在不确定的时间,被垃圾回收器回收

	--- 方法区
	
	--- 本地方区
	
	--- 寄存器

3、数组的特性

  == 例一 
  int [] x=new int []{1,3,5};	
  int [] y=x;  
 
 	y[0]=100;
	y[1]=300;
	
	for(int i=0;i<y.length;i++){
			System.out.println (y[i]);  100  300  5
	}
	
	for(int i=0;i<x.length;i++){
		System.out.println( x[i]) ; //1 00  300  5
		
		//可以看到,对数组y的操作,影响到了x,因为它们指向的都是同一实体
	}
	
	== 例二 脚标越界异常
		public static void main(String [] array)
		{
		  float [] x = {3,4,4.5f, 8,9,2,4.44f}; 
		  for(int i=0;i<=x.length;i++){ //注意这里写的是 <=
		  	System.out.println(x[i]); //java.lang.ArrayIndexOutOfBoundsException
		  }
		}
		
  == 例三  空指针异常
	   float [] x = {3,4,4.5f, 8,9,2,4.44f}; 
  
     x=null;  //java.lang.NullPointerException
     
     试图访问值为null的变量的属性,或方法的时候,将发生此异常

4、数组的遍历

	直接打印数组
	float [] x = {3,4,4.5f, 8,9,2,4.44f}; 
  
  System.out.println(x);  //[F@e6f7d2
  
  int  [] y = {5,3,2}; 
  System.out.println(y);  //[I@19836ed
  
  
  直接打印数组或某个对象的时候,它会自动调用这个数组或对象的toString()方法,输出的内容是这个方法的返回值
  
  例一 把数组中的所有元素求合
	  float [] x = {3,4,4.5f, 8,9,2,4.44f}; 
	  float sum=0;
	  for(int i=0;i<x.length;i++){	
	  	sum+=x[i];
	  }
	  System.out.println(sum);
	  

  例二 把数组中的元素拼成字符串返回
  	public static void main(String [] array)
		{
			int []  x={1,4,6,9};
			String result= test( x );
			System.out.println(result);
	
		}
		
		public static String test(int [] x)
		{
			String result="";
			for(int i=0;i<x.length;i++)
			{
				if(i!=x.length-1){
					result+=x[i]+",";	
				}
				else{
						result+=x[i];
				}	
			}
			
			return result;
				
		}

  例三,写一个函数取数组中的最大元素
	  public static void main(String [] array)
		{
				int []  x={-1,-14,-6,-9,-2,6};
				
				int max=getMax(x);
				
				System.out.println(max);
		}
		
		static int getMax(int [] array)
		{
				int max=array[0];
				for(int i=0;i<array.length;i++)
				{
					if(array[i]>max)
					{
						max=array[i];
					}
				}
				return max;
		}

5、数组的排序

冒泡排序
public static void main(String [] args){
int [] a =new int []{9,7,24,6,51,3,3,1,2,18,0};	 
paixu(a);	 
	 for(int i=0;i<a.length;i++)
	 {
	 		System.out.println(a[i]);
   }
}
static void paixu(int [] a)
{
		for(int i=0;i<a.length-1;i++) //共要进行length-次比较
		{
				for(int j=0;j<a.length-i-1;j++)
				{
					if(a[j]>a[j+1])
					{
						 int temp=a[j];
						 a[j]=a[j+1];
						 a[j+1]=temp;
					}
				}
		}
}

使用jdk提供的类进行排序
注意,要导包 import java.util.Arrays;
	 
	 int [] a =new int []{9,7,24,6,51,3,3,1,2,18,0};
   Arrays.sort(a);
	 
	 for(int i=0;i<a.length;i++)
	 {
	 		System.out.println(a[i]+"\t");
   }

6、数组的copy

		//方式一
	  //java.util.Arrays  
	  //声明: 	static int[] copyOf(int[] original, int newLength) 
	  
   
   int [] a =new int []{9,7,24,6,51,3,3,1,2,18,0};

	   int [] b=Arrays.copyOf(a,a.length);
	   
	   b[0]=9999;  //这个操作,不会影响到 a 
	   for(int i=0;i<b.length;i++){
	    	System.out.println(b[i]);
	   }
	   
	     System.out.println("-------------");
	   
	    for(int i=0;i<a.length;i++){
	   	 System.out.println(a[i]);
	   }

  //方式二  	System.arraycopy() 
  //声明 static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)  
   int [] a =new int []{9,7,24,6,51,3,3,1,2,18,0};
   int [] b=new int [a.length]; 
   System.arraycopy(a,0,b,0,a.length)

7、移除数组中的一个元素

数组的长度确定了就不能再变了
要求写一个函数,接收一个数组,和一个整数,
这个函数能从数组中将输入的这个整数移除,返回移除后的数组
public static void main(String[] args) {
	int[] x = { 3, 4, 6, 2, 6, 6, 7, 9 };
	int[] result = test(x, 4);

	for (int i = 0; i < result.length; i++) {
		System.out.println(result[i]);
	}
}

public static int[] test(int[] x, int num) {
	int count = 0;
	for (int i = 0; i < x.length; i++) {
		if (num == x[i]) {
			count++;
		}
	}

	int[] result = new int[x.length - count];
	int index = 0;
	for (int i = 0; i < x.length; i++) {
		if (x[i] != num) // 如果 不是要被去掉的数
		{
			result[index++] = x[i];
		}
	}

	return result;
}

8、二维数组

什么是二维数组  在java中,就是数组的数组
int [] xx [] //可以

int [] [] xx =new int[3][] // 可以, xx是一个二维数组,它的元素,是三个一维数组,但是,每 个数组的长度不确定
     for(int i=0;i<xx.length;i++){
			 System.out.println(xx[i]);  //null ,打印三次
		 }
		 
int [] [] xx=new int [] [] //不合法
int [] [] kk=new int[3][50]; //合法 kk中有3个一维数组,每个数组有50个元素

kk[0][0] =9999 //给第一个元素赋值
kk[2][49] =8888 //给最后一个元素赋值

二维数组的遍历
for (int i = 0; i < kk.length; i++) {
		for (int j = 0; j <kk[i].length; j++) {
			System.out.print(kk[i][j]+"\t") ;
		}
		System.out.println();
	}
	
 二维数组的求合 ...
 	int[][] zz={{1,4,5},{1,4,5},{3,4}};
	int sum=0;
	for(int i=0;i<zz.length;i++){
		for(int j=0;j<zz[i].length;j++)
		{
			sum+=zz[i][j];
		}
	}
	
	System.out.println(sum);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值