Java数组

一、数组简介

  • 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  • 数组属引用类型,数组型数据是对象(Object)
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  • 数组类型是单一,只能存放相同类型的数据
  • 数组一旦创建,大小就是固定的
  • 数组中每个元素都有自己的位置(下标),从0开始

所以数组一般用来存放大小固定的数据:例如存放班级学生成绩

int scores = {100,90,98,99,88,80}

二、创建数组

关键数组的关键字:[]

int [] aint 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 通过算法实现排序(冒泡)

升序为例:

  1. 将相邻的两个数,进行比较,将大的数据往后移动。依次循环进行比较,从而找到最大的数据
  2. 由于每一次循环只能确定一个数据,所以需要多次嵌套循环来完成最终的排序
  3. 详细如下图

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数组的常规操作的更多相关文章

  1. Java核心基础第2篇-Java基本语法

    Java基本语法 本章一起来探讨下Java的基本语法.主要从以下几个方面展开: Java关键字 Java标识符 Java变量 Java数据类型 Java运算符 学完本章内容之后,我们对Java会有更深 ...

  2. Java核心基础第5篇-Java面向对象_类和对象

    Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...

  3. Java核心基础第3篇-Java流程控制

    Java流程控制 本章一起来探讨下Java的流程控制语句.主要从以下几个方面展开: Java分支语句 Java循环语句 Java其实和其他任何的开发语言一样,分支语句和循环语句是必不可少的,有个这两个 ...

  4. Java核心基础第1篇-走进Java世界

    一.Java简介 1.1 Java概述 Java从一开始就以友好的语法.面向对象.内存管理和最棒的跨平台可移植性来吸引程序员. 写一次就可以在所有地方执行( write-once/run-anywhe ...

  5. 第二十三节:Java语言基础-详细讲解函数与数组

    函数 函数在Java中称为方法,在其他语言中可能称为函数,函数,方法就是定义在类中具有特定功能的程序.函数,在Java中可称为方法. 函数的格式: 修饰符 返回值类型 函数名(参数类型 参数1, 参数 ...

  6. Java语言基础(二) Java关键字

    Java语言基础(二) Java关键字 Java关键字比较多,我就不列举出来了,只记录一些常用的小知识点: ①Java的关键字只有小写. ②then.sizeof都不是Java的关键字,熟悉C++的程 ...

  7. [Java入门笔记] Java语言基础(五):数组

    简介 数组可用用于存储存储多个数据,Java的数组要求所有的数组元素具有一种相同的数据类型.一旦数组初始化完成,数组在内存中的空间被固定下来,长度不可改变,即使把数组的元素清空,所占用的空间依然被保留 ...

  8. Java编程基础阶段笔记 day01 Java语言概述

    ​目录内容 DOS命令 电脑配置 Java语言的特性 Java两种核心机制 Java语言环境搭建 第一个Java程序 注释 Java语句说明 编程风格 作业 常用的DOS命令 dir :    列出当 ...

  9. Java入门基础,必读!Java单行、多行和文档注释!

    在编写Java的过程中,我们需要对一些程序进行注释.除了方便自己阅读之外,我们还需要为他人更好地理解我们的程序.因此,我们需要对一些程序进行注释,这些注释可以是编程思想,也可以是程序的作用,可以说是J ...

随机推荐

  1. 抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext

    长话短说,本文带大家抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext 引言 C#异步编程语法糖async/await,使开发者很容易就能编写异步代码. ...

  2. Mui入门(Day_42)

    开始体验Mui 1. 安装HbuilderX 下载地址:https://www.dcloud.io/hbuilderx.html 2. 新建Mui项目 3. 文件结构介绍 _ css : 样式表文件 ...

  3. 使用 Flux+Flagger+Istio+Kubernetes 实战 GitOps 云原生渐进式(金丝雀)交付

    在这篇指南中,你将获得使用 Kubernetes 和 Istio 使用 GitOps 进行渐进式交付(Progressive Delivery)的实际经验. 介绍 gitops-istio GitOp ...

  4. Locust入门

    Locust入门   Locust是一款Python技术栈的开源的性能测试工具.Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户: Locust并不小众,从它Github的Star数量就 ...

  5. 如何保证mq不丢消息

    1.消息的发送流程 一条消息从生产到被消费,将会经历3个阶段 生产阶段,Producer 新建消息,然后通过网络将消息投递给MQ Broker 存储阶段,消息将会存储在Broker端磁盘中 消费阶段, ...

  6. 自动驾驶QNX,Linux,Autosar概述

    自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...

  7. WebRTC框架中的硬件加速

    WebRTC框架中的硬件加速 典型缓冲流量 应用程序和单元测试设置 重要方法调用 WebRTC软件包 局限性 WebRTC是一个免费的开源项目,可为浏览器和移动应用程序提供实时通信功能. WebRTC ...

  8. JavaScript 中精度问题以及解决方案

    JavaScript 中的数字按照 IEEE 754 的标准,使用 64 位双精度浮点型来表示.其中符号位 S,指数位 E,尾数位M分别占了 1,11,52 位,并且在 ES5 规范 中指出了指数位E ...

  9. 【NX二次开发】多功能对话框UF_UI_message_dialog

    多功能对话框 1 extern DllExport void ufsta(char *param, int *returnCode, int rlen) 2 { 3 UF_initialize(); ...

  10. Redis与DB的数据一致性解决方案(史上最全)

    文章很长,而且持续更新,建议收藏起来,慢慢读! 高并发 发烧友社群:疯狂创客圈(总入口) 奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : 极致经典 + 社群大片好评 < Java 高并发 三 ...