当前位置: 首页 > news >正文

Java 数组、排序和查找(1)

目录

前言

一、一维数组

(1)数组介绍

(2)数组的使用

1)动态初始化

2)静态初始化

3)数组的引用

(3)数组的细节

(4)应用案例

二、数组赋值机制

 三、数组拷贝

总结


前言

国庆第五天,一维数组基本知识的复习。

一、一维数组

(1)数组介绍

        数组可以进行存放多个同一类型的数据。数组是一种引用数据类型,即数组就是一组数据。

(2)数组的使用

1)动态初始化

方法一:数据类型[ ] 数组名 = new 数据类型[大小]

       如:int[ ] a = new int[5];

方法二:先声明数组: 数据类型 数组名[ ]

       如:int[ ] a;

              再创建数组: 数组名 = new 数据类型[大小]

       如:a = new int[5];

2)静态初始化

方法:数据类型 数组名[ ] = {元素值1,元素值2……}

       如:int a[5] = {1, 2, 3, 4, 5};

3)数组的引用

引用方法:数组名 [下标];

注意:数组的下标是从0开始的,如:a数组第三个数的引用方法为 a[2]

(3)数组的细节

1)数组是多个相同类型数据的组合,实现对这些数据的统一管理

2)数组中的元素可以是任何数据类型,但不能混用

3)数组的下标是从 0 开始

4)数组的下标必须在指定范围内,否则报错

5)数组创建后,如果没有赋值则会有默认值

int 0、shrot 0、byte 0、long 0、float 0.0、double 0.0、String null、boolean false

(4)应用案例

1)创建一个 char 类型的 26 个元素的数组,分别 放置'A'-'Z',使用循环访问所有元素

public class ArrayExercise01 {
	public static void main(String[] args) {

		char[] c = new char[26];
		for(int i = 0; i < c.length; i++) {
			c[i] = (char) ('A' + i);// 'A' + i 是 int型,需要强制类型转换
			System.out.print(c[i] + " ");
		}

	}
}

输出结果:

 2)请求出一个数组 int[] 的最大值 {4,-1,9,10,23},并得到对应的下标

public class ArrayExercise02 {
	public static void main(String[] args) {

		int[] a = {4 , -1 , 9 , 10 , 23};
		int max = a[0];
		int j = 0;
		for(int i = 1 ; i < a.length ; i++) {
			if(a[i] > max) {
				max = a[i];
				j = i;
			}
		}
		System.out.println("最大值为:" + max);
		System.out.println("最大值的下标为:" + j);
	}
}

输出结果:

 思路分析:

1. 定义一个 int 数组 int[] a = {4,-1,9, 10,23};

2. 假定 max = a[0] 是最大值 , j=0;

3. 从下标 1 开始遍历 a, 如果 max < 当前元素,说明 max 不是真正的最大值, 我们就 max = 当前元素; j = 当前元素下标;

4. 当我们遍历这个数组 a 后 , max 就是真正的最大值,j 最大值对应的下标

二、数组赋值机制

1)基本数据类型赋值,这个值就是具体的数据,相互不影响。

如:int n1 = 10; int n2 = n1;

2)数组在默认情况下是引用传递,赋的值是地址。

3)基本数据类型赋值演示:

public class ArrayAssign {
	public static void main(String[] args) {

		//基本数据类型赋值,赋值方式为值拷贝
		//n2的变化,不会影响到n1的值
		int n1 = 10;
		int n2 = n1;

		n2 = 80;
		System.out.println("n1=" + n1);//10
		System.out.println("n2=" + n2);//80

	}
}

最后会输出:

 4)引用传递演示:

public class ArrayAssign {
	public static void main(String[] args) {

		//数组在默认情况下是引用传递,赋的值是地址,赋值方式称为 引用传递,传递的是一个地址
		int[] arr1 = {1,2,3};
		int[] arr2 = arr1; //把arr1赋给arr2
		//arr2 的值会影响 arr1 的值,所以称为引用传递
		arr2[0] = 10;
		for(int i = 0; i < arr1.length; i++) {
			System.out.println(arr1[i]);  // arr1 和 arr2 指向同一个数据空间
		}
	}
}

最后会输出:

 三、数组拷贝

案例演示:

将 int[] arr1 = {10,20,30}; 拷贝到 arr2 数组, 要求数据空间是独立的。

public class ArrayCopy {
	public static void main(String[] args) {

		 int[] arr1 = {10, 20, 30};

		 // 创建一个新的数组 arr2 , 开辟新的数据空间
		 // 大小 和arr1 一样大
		 int[] arr2 = new int[arr1.length];

		 //遍历 arr1 ,把每个元素拷贝到对应的位置
		 for(int i = 0; i < arr1.length; i++) {
		 	arr2[i] = arr1[i];
		 }
		 arr2[0] = 100; // 修改 arr2 不会对 arr1 造成影响

		System.out.print("arr1数组的值为:");
		for(int i = 0; i < arr1.length; i++) { 
		 	System.out.print(arr1[i] + " ");
		}

		System.out.println( );

		System.out.print("arr2数组的值为:");
		 for(int i = 0; i < arr1.length; i++) { 
		 	System.out.print(arr2[i] + " ");
		}
	}
}

最后输出结果为:

        可以看出 arr2 的改变没有影响到 arr1,这就是数组的拷贝,会开创独立的数据空间,不会互相影响。

总结

        努力,成功!

相关文章:

  • 你还没用过Mybatis-Plus?丝般顺滑,快速上手!
  • css3d动画:平移、旋转、缩放
  • 【英语:基础进阶_正式场景表达】F1.五步法搞定英文面试
  • SplitFS(SOSP‘19)
  • 【数据结构与算法】第十一篇:优先级队列
  • 【LeetCode】替换空格消失的数字分割链表除自身以外数组的乘积
  • 模糊控制之Sigmoidmf隶属度函数( PLC SCL代码)
  • atoi函数的初步实现到完美优化
  • 【云原生丨Kubernetes系列16】深入学习 ConfigMap 的使用
  • Python-字典,从基础到进阶用法大总结,进来查漏补缺
  • 2. 深度生成模型-扩散模型(去噪扩散概率模型)
  • java6:枚举类和注解
  • webpack5(高级)
  • Python从入门到数据分析第一篇—Python简介- Python介绍与初探
  • Element-UI+Vue实现主页布局——侧边栏用户布局(上)
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 03Go 类型总结
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • mysql常用命令汇总
  • Zsh 开发指南(第十四篇 文件读写)
  • 开源SQL-on-Hadoop系统一览
  • 排序(1):冒泡排序
  • 如何选择开源的机器学习框架?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 一些css基础学习笔记
  • 异步
  • 异常机制详解
  • ​什么是bug?bug的源头在哪里?
  • !$boo在php中什么意思,php前戏
  • #Linux(Source Insight安装及工程建立)
  • #NOIP 2014# day.1 T2 联合权值
  • $ git push -u origin master 推送到远程库出错
  • $.ajax()参数及用法
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (3)选择元素——(17)练习(Exercises)
  • (分享)自己整理的一些简单awk实用语句
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十五)使用Nexus创建Maven私服
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (原創) 物件導向與老子思想 (OO)
  • (转)scrum常见工具列表
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (转)为C# Windows服务添加安装程序
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .NET MVC之AOP
  • .NET开源项目介绍及资源推荐:数据持久层
  • .考试倒计时43天!来提分啦!
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @font-face 用字体画图标
  • @SpringBootApplication 包含的三个注解及其含义