Java入门(六)——数组

Java入门(六)——数组

目录

Java入门(六)——数组

语法格式

数组常见算法


语法格式

int[] a;
double b={10.0,20.0};        //静态初始化一堆数组
String[] s=new String[6];        //动态初始化一堆数据,静态初始化数组长度
int[] a[];        //(二维数组)
int[][] a={{1,2},{1}.{1,2,3}};
new int[]{1,2,3,4}        //直接传递一个静态数组

      - 引用数据类型,父类object
      - 数组是一个数据的集合,可以存储“基本数据类型”或者“引用数据类型”
      - 数组对象是堆内存当中,若是存储“java对象”,实际是对象的引用
      - 数组一旦建立,长度不可变,类型固定统一,元素内存地址连续,占用空间大小一样
      - 可分为一维数组、二维数组、多维数组
      - 自带length属性,获取数组中的长度
      - 优点:查找、查询、检索某个下标上的元素时效率极高
      * 缺点:
                - 在数组上随机删除或者增加元素,效率低,会涉及后面元素统一向前或者向后位移的操作
                - 不能存储大数据,因为难以在内存空间上找到一块特别大的连续的内存空间
      - 可以使用多态,eg:Animal an={new Cat(),new Bird()}
      - 扩容:将内容拷贝到另一个新建的大数组中,对象的拷贝实际是对象地址的拷贝

数组常见算法

(这里涉及到太多知识点吗,没有展开细致讲)

             * 冒泡算法:
                         - 冒泡排序算法(从第一个开始比较,从小到大依次排列)
                         - 选择排序算法(先找出最小的,比较前一位的值,从小到大依次排列)
             * 查找算法:
                         - 二分法查找(在已排列好的数组中,将数据对半分,直到找到想要找到的值为中间值)
             - 算法在java中已经分装好了,只要调用方法就可以(java.util.Arrays)【静态方法,直接使用类名调用】

范例代码

import java.util.Arrays;
import java.util.Scanner;

public class Array {
	public static void main(String[] args) {
		//“String[] args”:JVM调用main方法的时候,会直接传一个String数组,默认长度为0
		//这个数组是为了留给用户在控制台上输入参数,通过空格的方式进行分离,自动放在“String[] args”
		
		arrPrint();
		arrAlogorithm();
		int i=arrAlogorithm2();
		System.out.println("位置在:"+i);
	}
	
	public static void arrPrint() {
		int i=10;
		System.out.println("基本数据类型i:"+i);
		
		int[] a= {1,2,3,4,5,6,7,8,9,0};
		System.out.println("\n引用数据类型--数组:");
		for(int l=0;l<a.length;l++) {
			int num=l+1;
			System.out.println("第"+num+"个数据:"+a[l]);
		}
		
		Num[] n= {new Num(),new Num(),new Num()};
		System.out.println("\njava对象:");
		for(int l=0;l<n.length;l++) {
			System.out.println("数组地址"+n[l]);//对象的引用地址
			n[l].print();
		}

		int[] s=new int[20];
		System.out.println("\n数组拷贝:");
		System.arraycopy(a, 0, s, 0, a.length);//拷贝:拷贝对象,起始位置,拷贝目标,起始地址,拷贝长度
		System.arraycopy(a, 0, s, 10, a.length);
		for(int l=0;l<s.length;l++) {
			int num=l+1;
			System.out.println("第"+num+"个数据:"+s[l]);
		}
	}
	public static void arrAlogorithm() {
		int[] arr1= {3,1,5,8,7,6,0};		
		//冒泡排序		
		for(int i=arr1.length-1;i>0;i--) {//7条数据,外循环6次
			for(int j=0;j<i;j++) {//数据依次比较,之前比较的结果不再参与比较
				if(arr1[j]>arr1[j+1]) {//比较,对换
					int temp;
					temp =arr1[j];
					arr1[j]=arr1[j+1];
					arr1[j+1]=temp;					
				}
			}
		}
		p("冒泡排序",arr1);
		
		int[] arr2= {3,1,5,8,7,6,0};	
		//选择排序		
		for(int i=0;i<arr2.length-1;i++) {//7条数据,外循环6次
			int min=i;//假设最小值是数组第一个值
			for(int j=i+1;j<arr2.length;j++) {//对除第一个的值进行比较
				if(arr2[j]<arr2[min]) {//比较,最小值判断更改
					min=j;
				}
			}
			if(min!=i) {//若最小值更改,则进行对换
				int temp;
				temp=arr2[min];
				arr2[min]=arr2[i];
				arr2[i]=temp;
			}
		}
		p("选择排序",arr2);		
	}
	public static int arrAlogorithm2() {
		//二分法
		int[] arr= {1,2,3,4,5,6,7,8,9};
		Scanner a=new Scanner(System.in);
		System.out.println("请输入要寻找的数值:");
		int dest=a.nextInt();
		int begin=0;//开始下标
		int end=arr.length-1;//结束下标
		while(begin<=end) {//如果开始下标始终小于结束下标,循环继续
			int mid=(begin+end)/2;//对半
			if(arr[mid]==dest) {//如果寻找的值在中间,直接输出结果
				return mid;
			}
			else if(arr[mid]<dest) {//如果中间值小于目标值,向后半段继续对半寻找
				begin=mid+1;
			}
			else{//如果中间值大于目标值,向前半段继续对半寻找
				end=mid-1;
			}
		}
		return -1;
	}
	public static void p(String name,int[] arr) {
		System.out.println(name+":");
		for(int l=0;l<arr.length;l++) {
			System.out.print(arr[l]+"  ");
		}
		System.out.println("\n");
	}
}
class Num{
	static int i=10;
	public static void print() {
		System.out.println("这里是对象"+i);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值