六、JavaSE语言基础之数组
一维数组(关键字[])
关于数组的一些概念:
数组是多个基本数据有机组合形成一个复杂数据,是一个引用数据类型数据。
数组:装指定数量元素类型相同的数据的容器。
元素:在数组中,数组中的每个数据称之为数组的元素。
数组的定义
创建数组前必须先明确两点:元素类型与元素个数
创建数组对象共有三种格式
格式1:元素类型[] 数组名 = new 元素类型[元素个数];
格式2:元素类型[] 数组名 = new 元素类型[]{值1,值2,值3...};
格式3:元素类型[] 数组名 = {值1,值2,值3...};
格式3是格式2的简写,编译器会自动补齐
一条创建数组对象语句做了哪些事?
int[] arr = new int[10];
//左边 -> int []arr:定义一个要指向int数组的数组名arr;
//右边 -> new int[10]:创建一个装10个int元素的数组对象;
//中间 -> 让左边的数组名arr指向右边的数组对象;
关于数组应该注意的几点:
1、数组名存放的是所创建数组对象的地址;
2、关键字new每被调用一次就会创建一个新的对象(新的数组);
3、使用print语句打印引用数据类型的名字,所得结果是对象类型@对象的16进制内存地址;(字符数组除外,打印字符数组,打印的是元素组成的字符串)如:[I@7852e922;[:数组关键字、I:数据类型int、@之后:地址
4、数组中的元素如果没有赋值,编译器会赋予一个默认初始值,默认初始值是什么,取决于元素的类型。
5、获取数组元素的所有个数:对象名.length
使用数组好处:
1、数组会给其中的元素自动分配编号(索引、下标)编号0开始。
2、可以通过数组名加编号的方式为其赋值和获取该元素中存放的数据的值。
格式:数组名[元素下标];
数组元素的赋值格式:
数组名[数组下标]=符合该数组数据类型的数据;
在学习完数组之后,我们可能会遇到的第一个异常(编译器不会自动报错):
ArrayIndexOutOfBoundsException//数组下标越界异常
数组的遍历及求最大值
数组的遍历主要有两种方式:
方式1:使用for循环;
方式2:使用foreach语句;
求数组的最大值的思路如下:
1、假定数组第一位元素为最大值(max=array[0])
2、从数组的第二位元素开始向后遍历,依次与假定最大值max进行比较;如果大于max,则将max重新赋值;
数组的排序
在学习数组的排序之前,我们先学习如何交换两个变量的值,通常使用的方法有两种:
1、引入第三变量;
int a=3;
int b=8;
int c=a;//a=3 b=8 c=3
a=b;//a=8 b=8 c=3
b=c;//a=8 b=3 c=3
2、求和法;
int a=3;
int b=8;
a=a+b;//a=11 b=8
b=a-b;//a=11 b=3
a=a-b;//a=8 b=3
顺序排序
思想:依次拿当前元素和其后面的所有元素做比较。
int[] array = {1, 3, 5, 7, 9, 0, 8, 6, 4, 2};
int temporary;
for (int i = 0; i < array.length - 1; i++) {
for (int j = i+1; j < array.length; j++) {
if (array[i] > array[j]) {
temporary = array[i];
array[i] = array[j];
array[j] = temporary;
}
}
}
/*
关于顺序排序双层for循环的取值范围的两个问题:
1、为什么外层for循环的取值范围是i<array.length-1;
因为顺序排序的比较轮数是array.length-1;外层for初始值为0,所以外层for循环的取值范围是i<array.length-1;
2、为什么内层for循环的取值范围是j<array.length;
顺序排序的规则是依次拿当前元素和其后面的所有元素做比较;数组中的最后一个元素下标是array.length-1,j取值j<array.length;刚好在这个范围之中;
*/
冒泡排序
思想:依次拿相邻元素做比较
int[] array = {1, 3, 5, 7, 9, 0, 8, 6, 4, 2};
int temporary;
for(int round=0;round<array.length;round++){
for(int index=0;index<array.length-i-1;index++){
if(array[index]<array[index+1]){
temporary=array[index];
array[index]=array[index+1];
array[index+1]=temporary;
}
}
}
/*
关于冒泡排序双层for循环的取值范围的两个小问题:
1、为什么外层for循环的取值范围是i<array.length-1;
因为顺序排序的比较轮数是array.length-1;for初始值为0,所以外层for循环的取值范围是array.length-1;
2、为什么内层for循环的取值范围是j<array.length-i-1;
冒泡排序的规则是依次拿相邻元素做比较,最值会逐渐向后移动,直至数组末尾;也就是说经n轮排序后,数组末尾是一个有序元素组合,故末尾无需继续进行比较,也就是说每次的比较次数是递减的,故-i,以使内层循环次数递减;
*/
关于顺序排序与冒泡排序的小结:
顺序排序与冒泡排序的语法结构极为相似,但需要注意一点,顺序排序与冒泡排序的外层for循环虽然取值范围一样,但代表的含义却完全不同。顺序排序的外层for循坏不仅代表了需要进行比较的轮数,同时也代表了需要与后续元素进行比较的元素的下标,而冒泡排序的外层for循环则仅代表比较的总轮数;
插入排序排序
**思想: **
将整个数组array分为有序和无序的两个部分,前者在左边,后者在右边;
开始有序的部分只有array[0] , 其余都属于无序的部分,每次取出无序部分的第一个(最左边)元素,把它加入有序部分。
假设插入合适的位置p,则原p位置及其后面的有序部分元素都向右移动一个位置,有序的部分即增加了一个元素。
一直做下去,直到无序的部分没有元素;
int[] array = {3, 1, 4, 6, 5, 9, 8, 7};
for(int indexLow = 1; indexLow < array.length; indexLow++) {
int interem = array[indexLow];
int indexHigh = indexLow - 1;
for(;indexHigh >=0; indexHigh --) {
if(array[indexHigh]>interem) {
array[indexHigh +1]=array[indexHigh];
}else {
break;
}
}
array[indexHigh +1]=interem;
}
二维数组
n维数组:装指定数量相同类型的n-1维数组的容器,n维数组的元素是n-1维数组
二维数组关键字:[] []
创建二维数组的三种格式:
格式1:元素类型[][] 数组名 = new 元素类型[一维数组的个数][一维数组中元素的个数];
格式2:元素类型[][] 数组名 = new 元素类型[][]{{值1,值2..},{值1,值2..},{值1,值2..}};
格式3:元素类型[][] 数组名 = {{值1,值2..},{值1,值2..},{值1,值2..}};
int [][]arr = new int[3][4];
//arr:二维数组的名字、new int[3][4]:二维数组对象
//3:二维数组中有3个一维数组、4:每个一维数组中有4个元素
System.out.println(arr);//[[I@7852e922,二维数组地址
System.out.println(arr.length);//arr.length:二维数组中一维数组的个数
System.out.println(arr[0]);//[I@4e25154farr[i]:二维数组中下标为i的一维数组对象
System.out.println(arr[0].length);//arr[i].length:二维数组中下标为i的一维数组中的元素个数
System.out.println(arr[0][1]);//arr[i][j]:二维数组中下标为i的一维数组中下标为j的元素
遍历二维数组的方式:使用双层循环;
六、JavaSE语言基础之数组的更多相关文章
- 第二十四节:Java语言基础-讲解数组的综合应用
数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...
- R语言基础:数组&列表&向量&矩阵&因子&数据框
R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...
- Java之--Java语言基础组成—数组
Java语言基础组成-数组 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的数组,数组 ...
- Go语言基础之数组
Go语言基础之数组 本文主要介绍数组(array)及它的基本使用. Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化 ...
- C语言基础知识-数组和字符串
C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...
- GO学习-(8) Go语言基础之数组
Go语言基础之数组 Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为 ...
- go语言基础之数组比较和赋值
1.go语音基础之数组比较和赋值 示例: package main //必须有个main包 import "fmt" func main() { //支持比较,只支持 == 或 ! ...
- Java 语言基础之数组应用
什么时候使用数组呢? 如果数据出现了对应关系, 而且对应关系的一方是有序的数字编号, 并作为角标使用. 这时,就必须要想到数组的使用. 也就是将这些数据存储到数组中, 根据运算的结果作为角标, 直接去 ...
- Java 语言基础之数组常见操作
对数组操作最基本的动作: 存和取 核心思想: 就是对角标的操作 数组常见操作: 1, 遍历 2, 获取最大值和最小值 3, 排序 4, 查找 5, 折半查找 // 1. 遍历 int[] arr = ...
随机推荐
- 阅读vue源码-----内置组件篇(keep-alive)
1.前言: <keep-alive>是vue实现的一个内置组件,也就是说vue源码不仅实现了一套组件化的机制,也实现了一些内置组件. <keep-alive>官网介绍如下:&l ...
- 保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java、Golang两种客户端教学Case)
保姆级别的RabbitMQ教程!一看就懂!(有安装教程,送安装需要的依赖包,送Java.Golang两种客户端教学Case) 目录 什么是AMQP 和 JMS? 常见的MQ产品 安装RabbitM ...
- canal 环境搭建 canal 与kafka通信(三)
canal 占用了生产者 .net core端 使用消费者获取canal 消息 安装 Confluent.Kafka demo使用 1.3.0 public static void Consumer ...
- mysql 配置文件概述
mysql 配置文件概述 mysql 配置文件 mysql 的配置文件为 /etc/my.cnf 配置文件查找次序:若在多个配置文件中均有设定,则最后找到的最终生效 /etc/my.cnf --> ...
- 怎样使用yum-cron为CentOS7自动更新重要的安全补丁
怎样使用yum-cron为CentOS自动更新重要的安全补丁 2017年4月19日 | 分类: [技术] 参考:https://linux.die.net/man/8/yum-cron参考:http: ...
- linux进阶之网络技术管理
本节内容 1. 网络七层模型 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 2. TCP/UDP (1)TCP面向连接,可靠传输,消耗系统资源比较多,传输速度较慢,但是数据传 ...
- Java 中 volatile 关键字及其作用
引言 作为 Java 初学者,几乎从未使用过 volatile 关键字.但是,在面试过程中,volatile 关键字以及其作用还是经常被面试官问及.这里给各位童靴讲解一下 volatile 关键字的作 ...
- 03-用三种方法设置CentOS7使用代理服务器上网
一.永久设置 编辑配置文件 vi /etc/profile 在文件后添加以下内容: export http_proxy='http://代理服务器IP:端口号' export https_proxy= ...
- GLSL着色器,来玩
对实现动画的前端同学们来说,canvas可以说是最自由,最能全面控制的一个动画实现载体.不但能通过javascript控制点.线.面的绘制,使用图片资源填充:还能改变输入参数作出交互动画,完全控制动画 ...
- 3d分层悬停效果
3d分层悬停效果 写在前面 经过了2个星期的努力,我回来了!会继续将我学习路上遇到的问题,以及一些笔记,demo分享给大家 实现效果 致我最爱的backpink 实现思路 将6张图片,通过定位叠在一起 ...