一维数组(关键字[])

关于数组的一些概念:

数组是多个基本数据有机组合形成一个复杂数据,是一个引用数据类型数据。

数组:装指定数量元素类型相同的数据的容器。

元素:在数组中,数组中的每个数据称之为数组的元素。

数组的定义

创建数组前必须先明确两点:元素类型元素个数

创建数组对象共有三种格式

格式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语言基础之数组的更多相关文章

  1. 第二十四节:Java语言基础-讲解数组的综合应用

    数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...

  2. R语言基础:数组&列表&向量&矩阵&因子&数据框

    R语言基础:数组和列表 数组(array) 一维数据是向量,二维数据是矩阵,数组是向量和矩阵的直接推广,是由三维或三维以上的数据构成的. 数组函数是array(),语法是:array(dadta, d ...

  3. Java之--Java语言基础组成—数组

    Java语言基础组成-数组 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的数组,数组 ...

  4. Go语言基础之数组

    Go语言基础之数组 本文主要介绍数组(array)及它的基本使用. Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化 ...

  5. C语言基础知识-数组和字符串

    C语言基础知识-数组和字符串 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数组概述 在程序设计中,为了方便处理数据把具有相同类型的若干变量按有序形式组织起来的方式我们称为数组 ...

  6. GO学习-(8) Go语言基础之数组

    Go语言基础之数组 Array(数组) 数组是同一种数据类型元素的集合. 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化. 基本语法: // 定义一个长度为3元素类型为 ...

  7. go语言基础之数组比较和赋值

    1.go语音基础之数组比较和赋值 示例: package main //必须有个main包 import "fmt" func main() { //支持比较,只支持 == 或 ! ...

  8. Java 语言基础之数组应用

    什么时候使用数组呢? 如果数据出现了对应关系, 而且对应关系的一方是有序的数字编号, 并作为角标使用. 这时,就必须要想到数组的使用. 也就是将这些数据存储到数组中, 根据运算的结果作为角标, 直接去 ...

  9. Java 语言基础之数组常见操作

    对数组操作最基本的动作: 存和取 核心思想: 就是对角标的操作 数组常见操作: 1, 遍历 2, 获取最大值和最小值 3, 排序 4, 查找 5, 折半查找 // 1. 遍历 int[] arr = ...

随机推荐

  1. ES6学习-0 前言

    本菜鸟做了二十来年的程序开发了,前后台都写过,队伍也带过.大约是2000年左右,是用dephi 写后台CGI,所有的html,js,css基本都是混在CGI里输出到前台的,那时也没有明确的前后台的概念 ...

  2. VS·调试过程中某个操作导致调试突然退出之解决方案

    阅文时长 | 0.11分钟 字数统计 | 232字符 主要内容 | 1.引言&背景 2.声明与参考资料 『VS·调试过程中某个操作导致调试突然退出之解决方案』 编写人 | SCscHero 编 ...

  3. MakeCode图形编程应用在micro:bit上的多工性能实测

    1. 简述 本文不涉及对测试中所用到的设备或软件的推广. micro:bit 是一款由英国广播电视公司(BBC)为青少年编程教育设计,并由微软,三星,ARM,英国兰卡斯特大学等合作伙伴共同完成开发的微 ...

  4. golang:三次握手四次挥手总结

    TCP的三次握手 所谓三次握手 Three-Way Handshake 是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立.好比两个人在打电话: 当连接被建立或被终止,交换的报 ...

  5. 搭建LAMP环境部署Ecshop电商网站

    实战-部署Ecshop电商网站 实验环境 Centos7 ip:192.168.121.17 一.关闭防火墙和selinux [root@localhost ~]# systemctl stop fi ...

  6. IT菜鸟之交换机基础配置

    交换机属于二层设备(隶属于osi七层模型中的第二层:数据链路层,不识别不支持IP地址)  > 用户模式 用于登录设备 # 特权模式 用于查询设备配置 (config)# 全局模式 用于配置设备 ...

  7. android常用的四种对话框java代码

    AlterDialog:确认取消警告提示框 public void showAlertDialog(View view){ AlertDialog.Builder dialog = new Alert ...

  8. Docker删除某个容器时失败解决方案

    删除某个容器时,报错 ocker rm 容器id   image is being used by stopped container e11efb30362a   该报错的原因是要删除的该镜像,被某 ...

  9. Vue之前后端交互

    Vue之前后端交互 一.前后端交互模式 接口调用方式 原生ajax 基于jQuery的ajax fetch axios 异步 JavaScript的执行环境是「单线程」 所谓单线程,是指JS引擎中负责 ...

  10. webdriver中的等待——主要讲解WebDriverWait()

    webdriver中的等待--主要讲解WebDriverWait() 强制等待:sleep() 隐式等待:implicitly_wait() 显示等待:WebDriverWait() 与until() ...