同一种类型数据的集合,其实数组就是一个容器。数组既可以存储基本数据类型,也可以存储引用数据类型。
格式一:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
例,需求:想定义一个可以存储3个整数的容器。
int[] x = new int[3];
格式二:
元素类型[] 数组名 = new 元素类型[]{元素, 元素, ……};
例,
int[] arr = new int[] {3, 1, 6, 5, 4};
以上数组又可简写成:
int[] arr = {3, 1, 6, 5, 4};
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。共划分了5个不同的区域:
这一节举例说明在Java中数组的内存结构。
例一,定义一个数组,然后将其指向null,如下:
int[] arr = new int[3];
arr = null;
对于以上代码,数组在内存中的结构为:
例二,试看如下代码,你能不能画出数组在内存中的结构图呢?
int[] arr = new int[3];
int[] xxx = new int[3];
arr[1] = 34;
xxx[0] = 89;
System.out.println(arr[0]);
例三,最后看一个示例代码,希望你能画出数组在内存中的结构图。
int[] arr = new int[3];
int[] xxx = new int[3];
arr = xxx;
arr[1] = 34;
xxx[0] = 89;
System.out.println(arr[0]);
数组操作有两个常见的小问题:
数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[3];
System.out.println(arr[3]); // ArrayIndexOutOfBoundsException: 3:操作数组时,访问到了数组中不存在的角标
空指针异常(NullPointerException)
int[] arr = new int[3];
arr = null;
System.out.println(arr[1]); // NullPointerException:空指针异常,当引用没有任何指向,值为null的情况,该引用还在用于操作实体。
获取数组中的元素,通常会用到遍历,数组中有一个属性可以直接获取到数组的元素个数:length,使用方式:数组名称.length
。 下面我会用两个例子来讲解数组是如何遍历的。
例一,观察如下程序,你觉得是不是可以获取到数组中的每一个元素。
int[] arr = {3, 6, 5, 1, 8, 9, 67};
System.out.println("length: "+arr.length);
for (int x = 0; x < arr.length; x++) {
System.out.println("arr["+x+"]="+arr[x]+";");
}
此时,直接输出变量arr:
System.out.println(arr);
会得到诸如[I@139a55
的值,分析该值:
[
:表示是一个一维数组。I
:表示数组中的元素类型是int。139a55
:用哈希算法算出来的地址值。例二,定义一个功能,用于打印数组中的元素,元素间用逗号隔开。
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if(x != arr.length - 1)
System.out.print(arr[x] + ", ");
else
System.out.println(arr[x]+"]");
}
}
例,给定一个数组,如{5, 1, 6, 4, 2, 8, 9},获取数组中的最大值,以及最小值。
获取最大值的原理图(获取最小值同理):
用文字描述即为:
步骤如下:
此时,我们需要定义一个功能来完成,以便提高复用性。首先须明确两点:
未知内容:一个数组,int[]。
public static int getMax(int[] arr) {
int max = arr[0];
for (int x = 1; x < arr.length; x++) {
if(arr[x] > max)
max = arr[x];
}
return max;
}
获取最大值的另一种方式,可不可以将临时变量初始化为0呢?可以,这种方式其实是在初始化为数组中的任意一个角标。
public static int getMax_2(int[] arr) {
int max = 0;
for (int x = 1; x < arr.length; x++) {
if(arr[x] > arr[max])
max = x;
}
return arr[max];
}
同理,获取数组中的最小值,代码如下:
public static int getMin(int[] arr) {
int min = 0;
for (int x = 1; x < arr.length; x++) {
if(arr[x] < arr[min])
min = x;
}
return arr[min];
}
虽然Java中的排序算法有很多,但在这里我只讲其中两种,即选择排序和冒泡排序。在这一小节中我用一个例子来详细讲解选择排序。
例,对给定数组进行排序,如{5, 1, 6, 4, 2, 8, 9}。
选择排序的原理图:
/*
对给定数组进行排序,如{5, 1, 6, 4, 2}。
0-1 0-2 0-3 0-4
1-2 1-3 1-4
2-3 2-4
3-4
*/
public static void selectSort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = x + 1; y < arr.length; y++) {
if(arr[x] > arr[y]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
在这一小节中我用一个例子来详细讲解冒泡排序。例,对给定数组进行排序,如{5, 1, 6, 4, 9, 2, 8}。
冒泡排序的原理图:
/*
对给定数组进行排序,如{5, 1, 6, 4, 2}。
0-1 1-2 2-3 3-4
0-1 1-2 2-3
0-1 1-2
0-1
*/
public static void bubbleSort(int[] arr)
{
for (int x = 0; x < arr.length - 1; x++)
{
for (int y = 0; y < arr.length - 1 - x; y++)
{
if (arr[y] > arr[y + 1])
{
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
}
发现无论什么排序,都需要对满足条件的元素进行位置置换,所以可以把这部分相同的代码提取出来,单独封装成一个函数。
public static void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
那么,冒泡排序可以写为:
public static void bubbleSort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - x - 1; y++) { // -x:让每一次比较的元素减少,-1:避免角标越界
if(arr[y] > arr[y+1]) {
swap(arr, y, y+1);
}
}
}
}
同理,选择排序也可以写为:
public static void selectSort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = x + 1; y < arr.length; y++) {
if(arr[x] > arr[y]) {
swap(arr, x, y);
}
}
}
}
。。。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yerenyuan_pku/article/details/81639241
个人分类: ● Java编程语言
相关热词: cnn第六 第六范式 ce修改器第六关 it404第六关 以太坊第六分枝
▼查看关于本篇文章更多信息
区块链开发人才稀少?薪资高到爆!八周轻松学会
区块链以太坊DApp开发是怎么炼成的?区块链的日益火爆和备受追捧,使得区块链开发人才稀缺,同时更加伴随着高薪,想要转型却不了解,特整理出学习大纲分享
java基础课程ppt
2013年05月18日 482KB 下载
JAVA 课件 复习材料
2010年11月02日 1.75MB 下载
PHP100视频教程第一季6
2010年04月25日 14.5MB 下载
小甲鱼Python第六讲课后题
810
小甲鱼Python第六讲课后题 1.Python 的 floor 除法现在使用 “//” 实现,那 3.0 // 2.0 您目测会显示什么内容呢? 答案:1.0,Python会严格执行floor ...
第03讲 JAVA数组.ppt
2009年10月24日 73KB 下载
《产品思维30讲》 心得第七弹——产品世界观
40
本次与大家分析的是梁大师讲的创新模式板块:28~30讲。 第28讲 看产品的微观、中观与宏观视角 ...
Java常见笔试、面试系列深度剖析第六讲
2009年04月16日 4.11MB 下载
小甲鱼Python3学习笔记之第一讲(仅记录学习)
187
第一讲:我和Python的第一次亲密接触 一、知识点: 1. 什么是IDLE? IDLE是一个Python Shell,简单来说就是一个通过键入文本与程序交互的途径,类似windows中的cmd窗...
JAVA教程 第六讲 Java的线程和Java Applet
2008年08月21日 3.55MB 下载
java第六讲随笔
189
Java SE 第六节 1. 条件运算符(三元表达式) ,其形式为: type d = a ? b : c; 具体化形式为:int d = 2 2. 轻量级的文本编辑器:UltraEdi...
java学习第六讲
63
一:运算符 1.1算术运算符(+ - * /) 1.2 赋值运算符(= += -= *== /== ++ --) 列:a += b -->a = a+b; (++ 在前) ...
第六讲 JAVA API
189
理解API的概念 API的概念(Application Programming Interface)应用程序编程接口 String类和StringBuffer类1.位于java.lang包中(直接使...
清华大学公开课线性代数2——第3讲:奇异值分解
493
此博客停止更新迁移至SnailDove’s Blog,查看本文点击此处 笔记源自:清华大学公开课:线性代数2——第3讲:奇异值分解 提示:如果文中图片看不清文字,请右键单击鼠标,选择在新窗口打开图...
Java基础第六讲
106
一、面向对象 1.属性 就是事物的描述信息,相当于事物身上的名词. 2.方法 就是该事物可以做什么,相当于动词 3.成员变量 1...
系统辨识及自适应控制课件第六讲
2011年03月23日 345KB 下载
第六讲_路由器原理与配置.ppt
2008年11月07日 1.17MB 下载
王佩丰excel2010基础教程学习笔记(第六讲到第十讲)
61
选中数据所在区域,选择插入——数据透视表即可生成数据透视表。——将字段放入选定的区域,可以自由定制透视表。在值字段区域右键可以选择不同的显示和汇总方式。双击值字段的数据可以获取其源数据。行列字段的分组...
什么是 robotc?
735
robotc 是一门编程语言, 官方介绍说是基于 C 语言的针对机器人的一门编程语言. 官网 http://www.robotc.net.官网提供了开发 IDE, 可以基于图形化的拖拉式编程, 也可...
第六讲
370
今天的篮球赛很厉害,班里会打篮球的好多,会打篮球的就是酷。。。 今日结果: 1 退出程序 exit(-1). for 的另一种格式:for( k=1,i=1; str ...
李阿昀
已关注
原创
377
粉丝
2479
喜欢
825
评论
795
等级:
访问:
149万+
积分:
1万+
排名:
1034
勋章:
手把手教你学习Spring框架
阅读量:17162634 篇
Hibernate框架学习
阅读量:5355912 篇
Struts2框架学习
阅读量:63995 篇
SSH项目实战
阅读量:292272 篇
有关Oracle学习
阅读量:00 篇
李阿昀的Linux学习笔记
阅读量:00 篇
从零开始学习Maven
阅读量:35503 篇
MyBatis+SpringMVC
阅读量:12178319 篇
那些我接触过的J2EE组件
阅读量:00 篇
项目实战之淘淘商城
阅读量:311769102 篇
Java语言编程基础
阅读量:1093815 篇
展开
展开
展开
阅读量:292788
阅读量:49955
阅读量:39603
阅读量:26812
阅读量:25209
qq_41505485:打扰一下。刚开始配置的solr还成功了后来安装上中文分词器就报HTTP Status 503 - ...
n950814abc:感谢b博主的分享
n950814abc:博主很厉害
zx1749623383:ComparatorByName.java[code=java] return temp == 0...
hp961218:[reply]qq_41313648[/reply] 然后呢,把别人东西当成自己的,你觉得很爽? ...
请扫描二维码联系客服
400-660-0108
QQ客服 客服论坛
关于招聘广告服务 网站地图
©2018 CSDN版权所有 京ICP证09002463号
百度提供搜索支持
经营性网站备案信息
网络110报警服务
中国互联网举报中心
北京互联网违法和不良信息举报中心
0