《J2SE 回炉再造12》-------溺水狗

本文深入探讨了一维和二维数组的使用,包括初始化、拷贝和排序算法如冒泡排序,以及二分查找的实现。通过具体代码示例,讲解了如何对自定义Date类的对象数组进行排序和搜索,同时展示了数组拷贝的细节及其内存行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第六章 数组

  1. 提纲:
    在这里插入图片描述
  2. 一维数组概述:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 元素类型为引用类型的数组:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3. 数组的初始化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:
理解main函数中的参数:String[] args
约瑟夫环(逢三减一):选择排序法、冒泡排序法以及数组模拟链表法
包装类Integer中parseInt()的使用
Integer类的简单介绍(大佬版)
练习:
在这里插入图片描述
代码:

public class TestDateBinarySearch {
	public static void main (String [] args) {
		Date[] date = new Date[5];
		date[0] = new Date(2006,5,4);
		date[1] = new Date(2006,7,4);
		date[2] = new Date(2008,5,4);
		date[3] = new Date(2004,5,9);
		date[4] = new Date(2004,5,4);
		
		bubbleSort(date);
		
		for(int i=0;i<date.length;i++) {
			System.out.println(date[i]);
		}
		
		Date d = new Date(2008,5,4);
		System.out.println(d + " " +"binary search is" + " " + binarySearch(date,d) + " " +"index");
	}
	
	public static void bubbleSort (Date[] date) {
		int len = date.length;
		
		for (int i=len-1;i>=0;i--) {
			for (int j=0;j<=i-1;j++) {
				if (date[j].compare(date[j+1]) > 0) {
					Date temp = date[j];
					date[j] = date[j+1];
					date[j+1] = temp;
				}
			}
		}
	}
	
	public static int binarySearch (Date[] date,Date d) {
		
		if(date.length == 0)  return -1;
		int startPro = 0;
		int endPro = date.length-1;
		int m = (startPro + endPro)/2;
		
		while(startPro <= endPro) {
			if(date[m].compare(d) == 0) return m;
			if(date[m].compare(d) < 0) {
				startPro = m+1;
			}
			if(date[m].compare(d) > 0) {
				endPro = m-1;
			}
			m = (startPro + endPro)/2;
		}
		return -1;
	}
}

class Date {
		int year,month,day;
		
		Date (int year,int month,int day) {
			this.year = year;
			this.month = month;
			this.day = day;
		}
		
		public int compare (Date date) {
			return year > date.year ? 1
					:year < date.year? -1
					:month > date.month ? 1
					:month < date.month ? -1
					:day > date.day ? 1
					:day < date.day ? -1 : 0;
		}
		
		public String toString () {
			return "Year-Month-Day:" + year + "-" + month + "-" + day;
		}
	}

运行截图:
在这里插入图片描述
4. 二维数组概述
注:声明必须从高维到低维。
在这里插入图片描述
在这里插入图片描述
例:
在这里插入图片描述
在这里插入图片描述
5.数组的拷贝
在这里插入图片描述
例子代码:

public class TestArrayCopy {
	public static void main (String [] args) {
		String[] s = {"Mircosoft","IBM","Sun","Oracle","Apple"};
		//String[] s = ("Mircosoft");
		String[] sBak = new String[6];
	
		System.arraycopy(s,0,sBak,0,s.length);
	
		for(int i=0;i<sBak.length;i++) {
			System.out.print(sBak[i] + " ");
		}
		
		System.out.println();
		int[][] intArray = {{1,2},{1,2,3},{3,4}};
		int[][] intArrayBak = new int[3][];
		System.arraycopy(intArray,0,intArrayBak,0,intArray.length);
		intArrayBak[2][1] = 100;
		
		for(int i=0;i<intArrayBak.length;i++) {
			for(int j=0;j<intArrayBak[i].length;j++) {
				System.out.print(intArrayBak[i][j] + " ");
			}
			System.out.println();
		}
	}
}

效果图:
在这里插入图片描述
注意:这里输出的最后一个值为100,因为第二个数组复制的是第一个数组的引用,此时两者的低维数组仍为同一数组,故均发生变化。
内存分析图:
在这里插入图片描述

注:本博客由溺水狗原创但其学习资源资料来源于网络(马士兵老师的教学视频),特此感谢马士兵老师

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值