Java核心基础第4篇-Java数组的常规操作
Java数组

一、数组简介
- 数组是多个相同类型数据的组合,实现对这些数据的统一管理
- 数组属引用类型,数组型数据是对象(Object)
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型
- 数组类型是单一,只能存放相同类型的数据
- 数组一旦创建,大小就是固定的
- 数组中每个元素都有自己的位置(下标),从0开始
所以数组一般用来存放大小固定的数据:例如存放班级学生成绩
int scores = {100,90,98,99,88,80}
二、创建数组
关键数组的关键字:[]
int [] a 和 int a[]含义是一样的,[]和变量名前后是没有关系的。
2.1 只申明不赋值
type [] var;或者 type var [] ;
例如:
int score[];
int [] score;
Object [] obj; //Object是java语法中老祖宗
2.2 申明并赋值
type [] var = new type[size]; //创建的是数据,数组的元素为空。值默认的就是该类型的默认值
type [] var = {elm,elem2,elem3,...} //创建的同时,把数据也赋值了
public static void main(String[] args) {
// 申明 默认值
int score[] = new int[9];
for(int i = 0;i<score.length;i++) {
System.out.print(score[i]+"\t");
}
System.out.println("------------");
//创建并且赋值
int score2[] = {100,90,88,85,66};
for(int i = 0;i<score2.length;i++) {
System.out.print(score2[i]+"\t");
}

2.3 new数组内存模型
new:java中的关键字,主要作用用来在内存中,开辟新的空间,从而创建新的对象

2.4 下标操作元素
2.4.1 通过下标给元素赋值
int score[] = new int[9];
//指定元素赋值
score[2] = 10;
score[5] = 50;
2.4.2 通过下标获取元素内容
int num2 = score[2];
System.out.println("num2="+num2);
for(int i = 0;i<score.length;i++) {
System.out.print(score[i]+"\t");
}
2.5 注意事项
- Java中使用关键字 new 创建数组对象
- 定义并用运算符 new 为之分配空间后,才可以引用数组中的每个元素;
- 数组元素的引用方式:数组名[数组元素下标]
- 数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
- 数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 - n-1;如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]
- 每个数组都有一个属性 length 指明它的长度,例如:a.length 指明数组 a 的长度(元素个数)

三、遍历数组
遍历数组可以通过下标,或者增强foreach循环来进行元素的遍历
3.1 普通for循环
因为可以使用arr[index]方式访问元素,所以我们可以通过arr.length来循环获取不同索引的值;
但是注意:索引的范围是:0-(length-1),不能大于等于length因为下标是从0开始计算。不然抛出数组越界异常
int score[] = {100,90,88,85,66};
for(int i = 0;i<score.length;i++) {
System.out.println(score2[i]);
}
以上就是将score数组中所有的元素遍历了一次,并打印出来
3.2 增强for循环
Java有一种功能很强的循环结构,可以用来依次处理数组中的每个元素而不必为指定下标值而分心。
这种增强的for循环的语句格式为:
for(variable : arr)statement
例如:
int score[] = {100,90,88,85,66};
for(int ele:score){
System.out.println(ele);
}
这种语法和上面普通的for循环达到的效果是一样的。这种for each循环语句显得更加简洁、更不易出错
四、数组拷贝
如果希望将一个数组的所有值拷贝到一个新的数组中去,就要使用Arrays类的copyOf方法:
第2个参数是新数组的长度。这个方法通常用来增加数组的大小
int score[] = {100, 90, 88, 85, 66};
//长度超过原数据的部分:使用默认0替代
int[] newArr01 = Arrays.copyOf(score, 10);
//长度不足的,从前往后取对应的数据
int[] newArr02 = Arrays.copyOf(score, 3);
System.out.println("原数组 = " + Arrays.toString(score));
System.out.println("新数组1 = " + Arrays.toString(newArr01));
System.out.println("新数组2 = " + Arrays.toString(newArr02));

注意事项:
- 如果数组元素是数值型,那么多余的元素将被赋值为0;
- 如果数组元素是布尔型,则将赋值为false。
- 相反,如果长度小于原始数组的长度,则只拷贝最前面的数据元素。
五、数组排序
5.1 Arrays工具类排序
java.util.Arrays:属于工具类,所以在使用之前,必须先导包
public static void main(String[] args) {
int score [] = {99,89,78,88,69,70};
String ch[] = {"B","C","A","F","D"};
System.out.println("排序前:");
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]+"\t");
}
System.out.println();
//进行排序
//1.只提供了升序排序 从小到大 没有提供降序。自己去实现
//2.也叫做自然顺序。 A(65) B(66) C(67) D(68)
Arrays.sort(ch);
System.out.println("排序后:");
for (int i = 0; i < ch.length; i++) {
System.out.print(ch[i]+"\t");
}
}

4.2 通过算法实现排序(冒泡)
升序为例:
- 将相邻的两个数,进行比较,将大的数据往后移动。依次循环进行比较,从而找到最大的数据
- 由于每一次循环只能确定一个数据,所以需要多次嵌套循环来完成最终的排序
- 详细如下图

public static void main(String[] args) {
int score [] = {99,89,78,88,69,70};
//i=0 {89,78,88,69,70,99};
//i=1 {78,88,69,70,89,99};
//i=2 {78,69,70,88,89,99};
System.out.println("第原始的结果:");
for (int j = 0; j < score.length; j++) {
System.out.print(score[j]+"\t");
}
System.out.println();
//排序:把前面几次排好了,最后一个自动确定了位置 。少排序一次
//每次选一个最大的
for (int i = 0; i < score.length-1; i++) {
//相邻的两个进行比较,把大的往后移
for (int j = 0; j < score.length-1-i; j++) {
//如果说 前面比后面的大,两者更换位置
if(score[j]>score[j+1]) {
//两两互换,通过临时变量
int temp = score[j];
score[j] = score[j+1];
score[j+1] = temp;
}
}
System.out.println("第"+(i+1)+"次执行的结果:");
for (int j = 0; j < score.length; j++) {
System.out.print(score[j]+"\t");
}
System.out.println();
}
}
Java核心基础第4篇-Java数组的常规操作的更多相关文章
- Java核心基础第2篇-Java基本语法
Java基本语法 本章一起来探讨下Java的基本语法.主要从以下几个方面展开: Java关键字 Java标识符 Java变量 Java数据类型 Java运算符 学完本章内容之后,我们对Java会有更深 ...
- Java核心基础第5篇-Java面向对象_类和对象
Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...
- Java核心基础第3篇-Java流程控制
Java流程控制 本章一起来探讨下Java的流程控制语句.主要从以下几个方面展开: Java分支语句 Java循环语句 Java其实和其他任何的开发语言一样,分支语句和循环语句是必不可少的,有个这两个 ...
- Java核心基础第1篇-走进Java世界
一.Java简介 1.1 Java概述 Java从一开始就以友好的语法.面向对象.内存管理和最棒的跨平台可移植性来吸引程序员. 写一次就可以在所有地方执行( write-once/run-anywhe ...
- 第二十三节:Java语言基础-详细讲解函数与数组
函数 函数在Java中称为方法,在其他语言中可能称为函数,函数,方法就是定义在类中具有特定功能的程序.函数,在Java中可称为方法. 函数的格式: 修饰符 返回值类型 函数名(参数类型 参数1, 参数 ...
- Java语言基础(二) Java关键字
Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...
- [Java入门笔记] Java语言基础(五):数组
简介 数组可用用于存储存储多个数据,Java的数组要求所有的数组元素具有一种相同的数据类型.一旦数组初始化完成,数组在内存中的空间被固定下来,长度不可改变,即使把数组的元素清空,所占用的空间依然被保留 ...
- Java编程基础阶段笔记 day01 Java语言概述
目录内容 DOS命令 电脑配置 Java语言的特性 Java两种核心机制 Java语言环境搭建 第一个Java程序 注释 Java语句说明 编程风格 作业 常用的DOS命令 dir : 列出当 ...
- Java入门基础,必读!Java单行、多行和文档注释!
在编写Java的过程中,我们需要对一些程序进行注释.除了方便自己阅读之外,我们还需要为他人更好地理解我们的程序.因此,我们需要对一些程序进行注释,这些注释可以是编程思想,也可以是程序的作用,可以说是J ...
随机推荐
- js闭包和包装类
闭包 内部函数被返回到外部,函数本身保留了父函数的AO,即使父元素执行完了,取消对AO的引用,但依旧被子函数保留下来了,就形成了闭包. 闭包会导致原有作用域链不释放,造成内存泄漏. 作用 实现公有变量 ...
- Git指令大全
仓库 # 在当前目录新建一个Git代码库 $ git init # 下载一个项目和它的整个代码历史 $ git clone [url] 配置 # 显示当前的Git配置 $ git config --l ...
- 项目记事【Git】:git pull 出错 error: cannot lock ref 'refs/remotes/origin/feature/hy78861': is at d4244546c8cc3827491cc82878a23c708fd0401d but expected a6a00bf2e92620d0e06790122bab5aeee01079bf
今天 pull 代码的时候碰到以下问题(隐去了一些公司敏感信息): XXX@CN-00012645 MINGW64 /c/Gerrard/Workspace/XXX (master) $ git pu ...
- 从性能角度帮你理解HTTP协议
因为做性能测试分析的人来说,HTTP 协议可能是绕不过去的一个槛.在讲 HTTP 之前,我们得先知道一些基本的信息. HTTP(HyperText Transfer Protocol,超文本传输协议) ...
- TVM自动调度器
TVM自动调度器 随着模型大小,算子多样性和硬件异构性的不断增长,优化深度神经网络的执行速度非常困难.从计算的角度来看,深度神经网络只是张量计算的一层又一层.这些张量计算(例如matmul和conv2 ...
- 使用NDepend衡量代码的SOLID程度
SOLID是面向对象的软件开发中的5条准则,也是开发人员可以提升自己代码质量的准则.那么如何衡量自己的代码是否符合SOLID准则呢?NDepend这款工具也许可以帮得上忙.本文将介绍一些NDepend ...
- 『动善时』JMeter基础 — 45、脚本录制工具Badboy介绍
目录 1.Badboy软件介绍 2.Badboy下载 3.Badboy安装 4.Badboy界面介绍 (1)菜单栏: (2)工具栏: (3)左下角界面视图: 1.Badboy软件介绍 Badboy是一 ...
- Django基础之模板层
内容概要 模板层(模板语法) 模板语法传值模板语法过滤器(内置方法)模板语法标签(流程控制)自定义过滤器和标签(了解) 模板的导入与继承(面向对象) 内容详细 1 模板层之模板语法传值 http ...
- Netty 面试题 (史上最全、持续更新)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- 「10.16晚」序列(....)·购物(性质)·计数题(DP)
A. 序列 考场不认真读题会死..... 读清题就很简单了,分成若干块,然后块内递增,块外递减,同时使最大的块长为$A$ B. 购物 考场思路太局限了,没有发现性质, 考虑将$a_{i}$,排序前缀和 ...