Java基础--数组1

数组认识

概念

在内存中是一段连续的内存空间,用来存储不同或同种类型的数据

数组的长度

length---从1开始

数组的名字

给数组取的名字

数组的索引

index 从0开始

数组元素

数组中的数据

数组创建

静态创建

创建的时候同时赋值
数据类型[] 变量名 = {v1,v2,v3};
数据类型[] 变量名 = new 数据类型[]{v1,v2,v3};
/**
 * 
 * @author Administrator
 *	获取数组的长度:length
 *	数组的静态创建 ,添加,赋值
 */
public class ArrayDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//数组创建特殊写法 
		int arr[] = {1,2,3};
		//静态创建一个数组
		String[] strArr = {"hello","你好","我也好"};
		//获取数组长度
		int n = strArr.length;
		System.out.println("数组的长度为:"+n);
		//获取数组中"你好"这个元素
		String string = strArr[1];
		System.out.println(string);
		//添加元素
		strArr[2]="2333333333";
		System.out.println(strArr[2]);
		strArr[3]="我要进去";//编译不会报错,运行报错,数组索引越界异常,因为数组的索引一旦确定不能更改   
	}
}

动态创建

创建的时候只指定长度,不赋值
数据类型[] 变量名 = new 数据类型[数组长度];
/**
 * 
 * @author Administrator
 *	动态创建的数组,元素具有默认值,默认值根据数组的类型而定
 *	byte short int long  默认值为0
 *	boolean  默认值为false 
 *	char     默认值为空
 *	String   默认值为null
 */
public class ArrayDemo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//动态创建一个数组
		int[] arr=new int[6];
		//获取数组的长度
		int length = arr.length;
		//添加元素
		arr[0]=3;
		arr[1]=9;
		arr[2]=6;
		arr[3]=12;
		arr[4]=6;
		arr[5]=16;
		//arr[6]=21;   //java.lang.ArrayIndexOutOfBoundsException
		System.out.println(length);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]);
		System.out.println(arr[4]);
		System.out.println(arr[5]);
	}
}
/**
 * @author Administrator
 *	数组:
 *		在内存中是一段连续的内存空间,用来存储不同或同种类型的数据
 *	   数组的长度
 *	   数组的名字
 *	   数组的索引
 *	   数组元素
 *	定义数组:
 *	  数组: 数据类型[]
 *	  静态创建: 在创建数组的同时赋予数组元素
 *	  语法:
 *		常用:
 *		数据类型[] 数组名= {v1,v2,v3};
 *		数据类型[]数组名= new 数据类型[]{v1,v2,v3};
 *	动态创建: 只是创建出数组
 *	数据类型[] 数组名 = new 数据类型[数组长度];
 */
public class DefineArray {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//静态创建
		int[] arr= {1,2,3}; //推荐
		int[] arr1=new int[] {1,2,3};
		//动态创建
		int[] arr2=new int[5];
	}
}

栈和堆

堆是jvm中最大的一块内存区域

jvm的内存划分

为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
  • Jvm的内存划分
    在这里插入图片描述

用来存放变量的值,基本数据类型存储的是具体的值,引用数据类型存储的是引用地址。

凡事new出来的都会存到堆中,就会产生一个引用地址,可以赋值给一个变量,存储在堆中。
/**
 * 
 * @author Administrator
 * JVM
 * 栈:存放所以变量名,基本数据类型的值是存在栈中的,引用数据类型栈中存放的是引用地址
 * 堆:凡事new出来的数据都会放到堆里面,并且有一个地制值,赋给一个变量存在栈中
 * 堆是jvm最大的一块区域
 */
public class ArrayDemo3 {

	public static void main(String[] args) {
		int[] arr = {3,5,6,2,7,8,4,9,1};
		System.out.println(arr);    //[I@15db9742
	}
}

数组的遍历方式

方式1:普通for循环

利用数组的索引,长度获取元素
int[] arr={1,2};
for(int i=0;i<arr.length;i++){
	System.out.println(arr[i]);
}
/**
 * 
 * @author Administrator
 *	数组的遍历
 */
public class ArrayDemo4 {
	public static void main(String[] args) {
		// 静态创建一个数组
		int[] arr=new int[] {5,4,8,9,7,2,6,4,7,2,3,1};
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);
		System.out.println(arr[3]);
		System.out.println(arr[4]);
		System.out.println(arr[5]);
		System.out.println(arr[6]);
		System.out.println(arr[7]);
		System.out.println(arr[8]);
		System.out.println(arr[9]);
		System.out.println(arr[10]);
		System.out.println(arr[11]);
		//数组的遍历
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		System.out.println(arr);
		arr=new int[] {21,23,42,1,34,1,22};
		System.out.println(arr);
	}
}

方式2:foreach

语法:
	for(数据类型 变量名:数组名){

	}
变量名:代表数组中的每一个元素
	int[] arr={1,2};
	for(int e:arr){
		System.out.println(e);
	}
/**
 * 
 * @author Administrator
 *	数组的遍历
 *	第一种:
 *	利用数组的索引长度和for循环可以取到里面的每一个元素
 *	第二种:增强for循环(foreach)
 * 	for(源中的数据类型 变量名:数据源){
 *	}
 *	数据源:数据所存在的数组或者集合等
 *	源中的数据类型:如int[] int
 *	变量名:就代表了每一个元素
 *	特点:是用来数组所有的元素进行操作因为没有使用到数组的索引
 */
public class ArrayDemo5 {

	public static void main(String[] args) {
		// 静态创建一个数组
		int[] arr=new int[] {5,4,8,9,7,2,6,4,7,2,3,1};
		//使用foreach
		for (int i : arr) {
			System.out.println(i);
		}
	}

}

练习

public class ArrayPractice {

	public static void main(String[] args) {
		//静态创建一个数组
		int[] arr = new int[] {1,4,7,2,5,8,3,6,9,69,96};
		//1.求出该数组中第二个3的倍数的数字
		int count=0;
		for (int i : arr) {
			if(i%3==0) {
				count++;
				if(count==2){
					System.out.println(i);
					break;
				}
			}
		}
		//2.求出该数组中第4个3的倍数的位置
		count=0;
		for (int i = 0; i < arr.length; i++) {
			if(arr[i]%3==0) {
				count++;
				if(count==4) {
					System.out.println(i);
					break;
				}
			}
		}

	}
}
import java.util.Arrays;

public class ArrayPractice2 {

	public static void main(String[] args) {
		//静态创建一个数组
		int[] arr = new int[] {1,4,7,2,5,158,3,6,9,69,96};
		//1.求出该数组中最大的一个元素
		int max=arr[0];
		for(int i : arr) {
			if(i>max) {
				max=i;
			}
		}
		System.out.println(max);
		//以指定格式输出数组
		int[] arr1= {3,6,9};
		System.out.print("[");
		for (int i = 0; i < arr1.length; i++) {
			if(i==0) {
				System.out.print(arr1[i]);
			}else {
				System.out.print(","+arr1[i]);
			}
		}
		System.out.println("]");
		//优化
		String str="[";
		for (int i = 0; i < arr1.length; i++) {
			if(i==arr1.length-1) {
				str+=arr1[i]+"]";
			}else {
				str+=arr1[i]+",";
			}
		}
		System.out.println(str);
		str=Arrays.toString(arr1);
		System.out.println(str);
		//char类型的数组的特殊性
		char[] cArr= {'a','c','b'};
		System.out.println(cArr);   //打印结果:acb
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值