数组及排序

  • 1. 内容回顾
  • 2. 本章重点
  • 3. 具体内容
    • 3.1. 数组的定义和使用
      • 3.1.1. 什么是数组
      • 3.1.2 java数组的特点
      • 3.1.3 数组的定义
      • 3.1.4 数组的使用
      • 3.1.5 数组在内存中的存储方式
      • 3.1.6 数组的遍历
      • 3.1.7 数组的操作
      • 3.1.8 排序算法
      • 3.1.9 Arrays数组工具类
    • 3.2 对象数组
      • 3.2.1 对象数组创建和遍历
      • 3.2.2 对象数组的排序
    • 3.3 二维数组
  • 4. 本章总结
  • 5. 课后作业

1. 内容回顾

1.1. 课前测试
多刷题:

1.2 上节内容

2. 本章重点

2.1. 数组的定义和使用
2.2. 数组排序
2.3. 二维数组
2.4. 对象数组
2.5. Arrays工具类的使用

3. 具体内容

3.1. 数组的定义和使用

3.1.1. 什么是数组

所谓数组,是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。
在js中,数组没有数据类型限制,并且可以随意扩容。Java中的数组 就是 将相同数据类型的数据 进行存储的数据格式。并且存储到数组中的数据都会自动生成一个编号,称之为索引值或者下标。然后数组是通过操作索引值对数据进行存取。索引
值从0开始。并且java中的数组是定容,统一数据类型的。

3.1.2 java数组的特点

a. java数组是一种引用数据类型
b. java数组中的数据类型必须统一
c. java数组是定长的(长度一旦确定就不能变化)
d. 数组的重新赋值,只能通过标准格式,不能使用简化格式赋值
e. 初始化数组时如果没有直接赋值,那么数组中元素的默认值
整数: 0 浮点数: 0.0 字符:‘\u0000’ 布尔型:false 引用类型:null
f. 因为数组是定长的,如果想扩容只能创建一个新的数组。
Arrays.copyOf(原始数组,长度)

3.1.3 数组的定义

语法:

// 定义有容量的数组
数据类型[] 数组变量 = new 数据类型[数组容量];
// 定义有初始化数据的数组.后面的中括号中不能写长度
数据类型[] 数组变量 = new 数据类型[]{数据1,数据2...};
// 直接赋值创建(静态创建),定义和赋值必须写在一起
数据类型[] 数组变量 = {数据1,数据2...};

实例:

public static void main(String[] args) {/*数据类型 变量名 = 数据;数据类型[] 数组变量名 = new 数据类型[长度];*///int num = 10; // 普通变量//int[] numAry = new int[10]; // 数组对象// java中的数组创建// 方式一: 定义数组变量,并创建特定长度的数组空间// 没有赋值,有默认值: int 0,String null,char '0',boolean falseint[] numAry = new int[5];//System.out.println(numAry); // 输出数组再内存地址/*System.out.println(numAry[0]);System.out.println(numAry[1]);System.out.println(numAry[2]);System.out.println(numAry[3]);String[] nameAry = new String[3];//System.out.println(nameAry);System.out.println(nameAry[0]);System.out.println(nameAry[1]);System.out.println(nameAry[2]);//System.out.println(nameAry[3]);*///Array(数组)Index(索引)OutOf(超出)Bounds(边界)Exception(异常)// 方式二: 定义数组变量,并使用new的方式进行数据初始化// 后面的中括号,一定不能写长度int[] numAry2 = new int[]{200,100,300}; // 根据个数创建数组空间,并赋值/*System.out.println(numAry2.length); // length:数组长度System.out.println(numAry2[0]);System.out.println(numAry2[1]);System.out.println(numAry2[2]);*/// 方式三: 定义变量,用静态方式直接进行初始化// 这种方式必须再声明变量的同时进行赋值。不能先声明变量,再赋值int[] numAry3 ={12,34,11,39};// 循环for (int i=0;i<numAry3.length;i++){System.out.println(numAry3[i]);}
}

3.1.4 数组的使用

语法:

// 创建数组
数据类型[] 数组变量 = new 数据类型[数组容量];
// 通过数组变量+下标 为数组元素赋值。数组的最大下标只能取到"数组容量-1"
数组变量[下标1] = 数据1;
数组变量[下标2] = 数据2;
...
数组变量[数组容量-1] = 数据n;
// 通过数组变量+下标 访问数组元素
System.out.println(数组变量[下标])

实例:

public class Test2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 定义长度为5的整形数组,输入5个分数,并遍历输出int[] scoreAry = new int[5];//scoreAry[0] =234;//scoreAry[1] = 456;for (int i=0;i<scoreAry.length;i++){System.out.println("请输入第"+(i+1)+"个学生的分数:");int s = sc.nextInt(); // 接收整数// 将分数存入数组中scoreAry[i] = s;}System.out.println("==================");// for+索引 遍历for (int i=0;i<scoreAry.length;i++){System.out.println(scoreAry[i]);}System.out.println("==================");// for each 遍历for(int t : scoreAry){System.out.println(t);}}
}

注意: 当数组下标超出数组边界的时候,会报出ArrayIndexOutOfBoundsException

3.1.5 数组在内存中的存储方式

3.1.6 数组的遍历

方式一:for+索引

int[] scoreAry = new int[5];
// for+索引 遍历
for (int i=0;i<scoreAry.length;i++){System.out.println(scoreAry[i]);
}

方式二: for each 遍历

int[] scoreAry = new int[5];
// for each 遍历
for(int t : scoreAry){System.out.println(t);
}

3.1.7 数组的操作

求数组最大值,最小值,最大值下标,最小值下标

public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 定义长度为5的整形数组,输入5个分数,并遍历输出int[] scoreAry = new int[5];//scoreAry[0] =234;//scoreAry[1] = 456;for (int i=0;i<scoreAry.length;i++){System.out.println("请输入第"+(i+1)+"个学生的分数:");int s = sc.nextInt(); // 接收整数// 将分数存入数组中scoreAry[i] = s;}System.out.println("==================");// for+索引 遍历for (int i=0;i<scoreAry.length;i++){System.out.println(scoreAry[i]);}System.out.println("==================");// for in 遍历for(int t : scoreAry){System.out.println(t);}
}
public static void main(String[] args) {// 定义数组,存储5个分数,求最高分,最低分,最高分位置,最低分位置int[] scores = {67,34,88,29,5,87,120,33,58,90};// 定义最大值位置int maxPos = 0;// 定义最小值位置int minPos = 0;for (int i = 1; i < scores.length; i++) {// 比较对应位置上的数据if(scores[i]>scores[maxPos]){// 记录数据的位置maxPos = i;}if(scores[i]<scores[minPos]){minPos = i;}}System.out.println("最大值:"+scores[maxPos]+" 最大值位置:"+maxPos );System.out.println("最小值:"+scores[minPos]+" 最小值位置:"+minPos );
}

3.1.8 排序算法

 冒泡排序

public static void main(String[] args) {// N元数组冒泡序,两两相比小前移,外层循环从1始,内层循环减i去// 冒泡排序:// 1.比较 2.换位int[] numAry = {20,12,33,8,4,1,200,34,98};// 外层控制轮数for(int i=1;i<numAry.length;i++){// 内层控制比较过程(次数)for(int j=0;j<numAry.length-i;j++) {//核心// 比较if (numAry[j] > numAry[j + 1]) {// 换位int temp = numAry[j];numAry[j] = numAry[j + 1];numAry[j + 1] = temp;}}}for(int n :numAry){System.out.println(n);}
}

 选择排序
选择: 每轮排序都选择数据最小的那个元素(下标),与本轮排位第一的元素换位

public static void main(String[] args) {int[] numAry = {1,12,33,8,4,200,34,20,98};//k=1 k=5// 控制轮数,记录本轮第一个元素的位置for (int i=0;i<numAry.length-1;i++){int k=i; // 记录最小值的位置for(int j=i+1;j<numAry.length;j++){// 通过比较,记录最小值的位置// 如果k上的值,比j上的值大if(numAry[k]>numAry[j]){// 就要把j的值赋值给k。k总是指向最小值k = j;}}// 找到本轮最小值的位置System.out.println("K:"+k);// 如果最小值的位置,和排位第一的位置不同,则换位if(k!=i){int temp = numAry[i];numAry[i] = numAry[k];numAry[k] = temp;}}// 循环输出for (int n :numAry){System.out.println(n);}
}

 其它排序(自学)

3.1.9 Arrays数组工具类

 // 定义数组int[] nums = {20,30,40,12,17};// 排序Arrays.sort(nums);for (int n : nums){System.out.println(n);}// 字符串String res = Arrays.toString(nums);System.out.println(res);// 扩展数组(重点内容,是后面ArrayList集合扩容的核心方法)int[] my = Arrays.copyOf(nums,20);System.out.println(Arrays.toString(my));

扩容原理/图如下:

3.2 对象数组

3.2.1 对象数组创建和遍历

public static void main(String[] args) {// 定义对象数组//int[] nums; // 整形数组//String[] strs; // 字符串数组//Student[] stus; // 学生数组,每个元素空间,必须存储学生对象Student[] stus = new Student[10];// 在数组第一个位置存储一个学生Student s1 = new Student("张三","男",20);//System.out.println(s1.name+" "+s1.sex);//System.out.println(s1);stus[0] = s1;stus[1] = new Student("李四","女",18);stus[2] = new Student("王五","女",18);stus[3] = new Student("赵六","女",18);stus[4] = new Student("孙琪","女",18);// 遍历学生对象for (int i=0;i<stus.length;i++){if(stus[i]!=null) {Student x = stus[i];System.out.println(x.name+" "+x.sex+" "+x.age);//System.out.println(stus[i].name + " " + stus[i].sex + " " + stus[i].age);}}
}

3.2.2 对象数组的排序

public class Test2 {public static void main(String[] args) {Student[] stus = new Student[3];stus[0]=new Student("张三","男",20);stus[1]=new Student("李四","男",19);stus[2]=new Student("王五","男",25);for (Student s: stus){s.show();}System.out.println("====================");// 冒泡排序for(int i=1;i<stus.length;i++){for(int j=0;j<stus.length-i;j++){// 前面的学生和后面学生的年龄相比if(stus[j].age>stus[j+1].age){// 年龄大的学生,向后移动Student temp = stus[j];stus[j]=stus[j+1];stus[j+1]=temp;}}}for (Student s: stus){s.show();}}
}

3.3 二维数组

public static void main(String[] args) {// 存储一排学生的位置String[] names1 = {"张三","李四","王五"};// 存储一个班级的学生String[][] names2= new String[][] {//0 1 2{"张三","李四","王五"}, // 0{"赵六","孙琪","王高"}, // 1{"高达","悟空","唐僧"} // 2};// 创建二维数组: [行][列]String[][] names3 = new String[3][5];for (int i = 0; i < names2.length; i++) {System.out.println("第"+(i+1)+"排:");for (int j=0;j<names2[i].length;j++){System.out.print(names2[i][j]+" ");}System.out.println();}/*System.out.println(names2[0][0]);System.out.println(names2[0][1]);System.out.println(names2[0][2]);System.out.println(names2[1][0]);System.out.println(names2[1][1]);*/
}

4. 本章总结

 数组的定义和使用
 数组排序
 Arrays工具类的使用
 二维数组
 对象数组

5. 课后作业

定义长度为10的学生数组,实现学生数据的添加,删除,修改,查询操作

第五章 数组及排序 ① 笔记相关推荐

  1. 【JAVA SE】第五章 数组、多维数组和Arrays类

    第五章 数组.多维数组和Arrays类 文章目录 第五章 数组.多维数组和Arrays类 一.数组 1.概述 2.声明数组变量 3.创建数组 4.For-Each 循环 二.多维数组 1.概述 2.多 ...

  2. 信息学奥赛一本通(C++版)第一部分 C++语言 第五章 数组

    第五章 数组 第一节 一维数组 T1102 : 与指定数字相同的数的个数 时间限制: 1000 ms 内存限制: 65536 KB [题目描述]   输出一个整数序列中与指定数字相同的数的个数. [输 ...

  3. 计算机科学导论第五章计算机组成 学习笔记+习题答案

    第五章 计算机组成 通过本章的学习,学生应该能够∶ 列出计算机的三个子系统; 描述计算机中央处理单元(CPU)的作用; 描述典型计算机中指令周期的取指令-译码-执行阶段; 描述主存和它的地址空间; 区 ...

  4. Java总结五:数组、排序和查找

    数组.排序和查找 ⭐️数组⭐️

  5. 【课上笔记】第五章 数组和广义表

    数组和广义表 5.1多维数组 5.1.1数组的逻辑结构 数组是我们熟悉的一种数据结构,可以看作线性表的推广. 数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一类型.比如 ...

  6. 第五章 数组Ivor Horton

    5.1数组简介 说明数组的概念的及其作用的最好方法,是通过一个例子,来说明使用数组后程序会变得非常简单 5.1.1 不用数组的程序 如何声明一个数组 数据类型 数组名称[长度]; C语言中的数组初始化 ...

  7. Java基础-第五章(数组高级)

    一.方法参数的值传递机制 Java方法的参数传递只有一种: 值传递,所谓值传递,就是将实际参数值的副本,传入方法内,而参数本身不会收到任何影响; main方法的数组参数 public class He ...

  8. PL/SQL第五章 Order by排序

    1 -- 排序 2 -- 1.列明排序 3 -- 2.别名排序 4 -- 3.列位置排序(当使用union,union all,intersect,minus集合操作,列明不同,但希望排序) 5 SE ...

  9. JAVA-初步认识-第五章-数组-常见操作-最值

    一. 最值 数组的操作是对数组中的元素进行操作,有时需要对元素的位置重新进行安排,有时仅需要提供题目需要的那个数据. 在视频没有讲解怎么做之前,我先提供一个思路.得出最值肯定是一个一个地比较出来的,这 ...

  10. 第五章 数组和指针的关系

    如果对声明数组的语句不太明白的话,请参阅我前段时间贴出的文章<<如何 理解c和c++的复杂类型声明>>.     数组的数组名其实可以看作一个指针.看下例: 例八:       ...

最新文章

  1. C ++变量,文字和常量
  2. Mastercam X4中文版三维造型设计基础与典型范例
  3. php固定空格,使用php校对(固定标点符号,空格,大写字母)生物页面文本
  4. 144.⑨要写信(错排公式与高精度练习)
  5. Android 上传图片实例,java上传图片接口
  6. 安卓手机备份_安卓手机数据备份与恢复方法汇总和操作详解
  7. Python学习笔记之函数(一)
  8. bzoj4558[JLoi2016]方 容斥+count
  9. bzoj 1027: [JSOI2007]合金(floyd最小环)
  10. ehlib的DBGridEh控件中使用过滤功能的方法
  11. 关于DNF的多媒体包NPK文件的那些事儿(6) - IMGV4
  12. ISO27000系列标准
  13. 关于vcf文件的读取
  14. 2021年发表心理学论文被引量TOP 10
  15. 某云不限速破解详细教程附工具
  16. spring boot火车票售卖系统毕业设计代码211004
  17. 业聚医疗港交所上市:市值76亿港元 为钱永勋家族企业
  18. 图书馆机器人索书号识别
  19. aspx页面打开html文件,aspx文件如何打开
  20. carlife Android版本,carlife车机端app下载-百度carlife车机端官网app下载安卓版 v5.4.2-友情手机站...

热门文章

  1. [hihoCoder太阁最新面经算法竞赛1] 穿越禁区 (DFS,并查集,计算几何) 难题
  2. 单片机学习——看门狗
  3. 读文件java_java怎么读取文件?
  4. cdr怎么算曲线周长_cdr怎么计算图形的周长和面积? cdr图形计算长度和面积的技巧...
  5. 服务器raid5数据恢复成功案例,磁盘阵列数据恢复方法
  6. Elasticsearch开发进阶指南——如何选择合适的ES版本
  7. elasticsearch版本介绍
  8. 找同学 字典 11.12
  9. Typescript无法导入json的问题
  10. exsi服务器如何支持usbkey,ESXi直通USB键鼠