一起初学java,笔记记录的第五天:数组、排序和查找

适用于初学java者

这个首先指出本文中图片和资源来自**韩顺平**老师,感谢老师做的无私奉献的教学!

1. 数组介绍

数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。 即:数(数据)组(一组)就是一组数据

例:double[] hens = {3, 5, 1, 3.4, 2, 50, 7.8, 88.8,1.1,5.6,100};

2.数组使用

2.1动态初始化

先声明数组
语法:数据类型 数组名[];
也可以 数据类型[] 数组名;
int a[]; 或者 int[] a;

创建数组
语法: 数组名=new 数据类型[大小];
a=new int[10];

2.2静态初始化

2.3初始化注意事项

  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  2. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
  3. 数组创建后,如果没有赋值,有默认值 int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null
  4. 使用数组的步骤 1. 声明数组并开辟空间 2 给数组各个元素赋值 3 使用数组
  5. 数组的下标是从 0 开始的。
  6. 数组下标必须在指定范围内使用,否则报:下标越界异常,
  7. 数组属引用类型,数组型数据是对象(object)

3.数组赋值机制

  1. 基本数据类型赋值,这个值就是具体的数据,而且相互不影响。 int n1 = 2; int n2 = n1;
  2. 数组在默认情况下是引用传递,赋的值是地址。 看一个案例,并分析数组赋值的内存图(重点, 难点. )。
//代码 ArrayAssign.java
int[] arr1 = {1,2,3};
int[] arr2 = arr1;

4.数组拷贝

编写代码 实现数组拷贝(内容复制) ArrayCopy.java 将 int[] arr1 = {10,20,30}; 拷贝到 arr2 数组, 要求数据空间是独立的.

//编写一个 main 方法
public static void main(String[] args) { //将 int[] arr1 = {10,20,30}; 拷贝到 arr2 数组, //要求数据空间是独立的. int[] arr1 = {10,20,30}; //创建一个新的数组 arr2,开辟新的数据空间 //大小 arr1.length; int[] arr2 = new int[arr1.length]; //遍历 arr1 ,把每个元素拷贝到 arr2 对应的元素位置 for(int i = 0; i < arr1.length; i++) {arr2[i] = arr1[i];}//老师修改 arr2, 不会对 arr1 有影响. arr2[0] = 100; //输出 arr1 System.out.println("====arr1 的元素===="); for(int i = 0; i < arr1.length; i++){System.out.println(arr1[i]);//10,20,30 }System.out.println("====arr2 的元素===="); for(int i = 0; i < arr2.length; i++) { System.out.println(arr2[i]);}
}

5.数组反转

参考上面代码。自己完成。

6.数组添加/扩容

要求:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java 1) 原始数组使用静态分配 int[] arr = {1,2,3}
2) 增加的元素 4,直接放在数组的最后 arr = {1,2,3,4}
3) 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n

思路分析
1. 定义初始数组 int[] arr = {1,2,3}//下标 0-2
2. 定义一个新的数组 int[] arrNew = new int[arr.length+1];
3. 遍历 arr 数组,依次将 arr 的元素拷贝到 arrNew 数组
4. 将 4 赋给 arrNew[arrNew.length - 1] = 4;把 4 赋给 arrNew 最后一个元素
5. 让 arr 指向 arrNew ; arr = arrNew; 那么 原来 arr 数组就被销毁
6. 创建一个 Scanner 可以接受用户输入
7. 因为用户什么时候退出,不确定,使用 do-while + break 来控制

7.排序的介绍

排序是将多个数据,依指定的顺序进行排列的过程。

7.1内部排序:

指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法、选择 式排序法和插入式排序法);

7.2外部排序:

数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)

7.3冒泡排序法

//核心代码
for( int i = 0; i < arr.length - 1; i++) {//外层循环是 4 次 for( int j = 0; j < arr.length - 1 - i; j++) {//4 次比较-3 次-2 次-1 次 //如果前面的数>后面的数,就交换 if(arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } }

7.4查找

在 java 中,我们常用的查找有两种:

  1. 顺序查找 SeqSearch.java
  2. 二分查找【二分法,我们放在算法讲解】
    代码演示:
import java.util.Scanner;
public class SeqSearch {
//编写一个 main 方法 public static void main(String[] args) {/*有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏: 从键盘中任意输入一个名称,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值 思路分析 1. 定义一个字符串数组 2. 接收用户输入, 遍历数组,逐一比较,3. 如果有,则提示信息,并退出 *///定义一个字符串数组 String[] names = {"白眉鹰王", "金毛狮王", "紫衫龙王", "青翼蝠王"}; Scanner myScanner = new Scanner(System.in); System.out.println("请输入名字"); String findName = myScanner.next(); //遍历数组,逐一比较,如果有,则提示信息,并退出 //这里给大家一个编程思想/技巧, 一个经典的方法 int index = -1; for(int i = 0; i < names.length; i++) {//比较 字符串比较 equals, 如果要找到名字就是当前元素 if(findName.equals(names[i])) {System.out.println("恭喜你找到 " + findName); System.out.println("下标为= " + i); //把 i 保存到 index index = i; break;//退出 } }if(index == -1) { //没有找到 System.out.println("sorry ,没有找到 " + findName); }}
}

8.多维数组-二维数组

  1. 从定义形式上看 int[][]
  2. 可以这样理解,原来的一维数组的每个元素是一维数组, 就构成二维数组
    int[][] arr = {
    {0, 0, 0, 0, 0, 0},
    {0, 0, 1, 0, 0, 0},
    {0,2, 0, 3, 0, 0},
    {0, 0, 0, 0, 0, 0} };
  3. 二维数组的每个元素是一维数组, 所以如果需要得到每个一维数组的值

8.1静态初始化

  1. 语法: 类型[][] 数组名=new 类型[大小][大小]
  2. 比如: int a[][]=new int[2][3]
  3. 使用演示
  4. 二维数组在内存的存在形式(!!画图)
    定义 类型 数组名[][] = {{值 1,值 2…},{值 1,值 2…},{值 1,值 2…}}

8.2动态初始化

先声明:类型 数组名[][]; TwoDimensionalArray02.java
再定义(开辟空间) 数组名 = new 类型[大小][大小]
赋值(有默认值,比如 int 类型的就是 0)

8.3二维数组的应用案例

  1. 使用二维数组打印一个 10 行杨辉三角 YangHui.java

8.4二维数组使用细节和注意事项

  1. 一维数组的声明方式有: int[] x 或者 int x[]
  2. 二维数组的声明方式有: int[][] y 或者 int[] y[] 或者 int y[][]
  3. 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如: map[][] 是 一个二维数组
    int map [][] = {{1,2},{3,4,5}}
    由 map[0] 是一个含有两个元素的一维数组 ,map[1] 是一个含有三个元素的一维数组构成,我们也称为列数不等 的二维数组

9. 本章作业




本文是作为作者本人的学习笔记分享交流使用,出处来自韩顺平老师

相关学习资源

全部在内需要的自取
链接:https://pan.baidu.com/s/1plzExeIUuWAim2QsUWpVJQ
提取码:67ma
–来自百度网盘超级会员V5的分享

一起初学java,笔记记录的第五天:数组、排序和查找相关推荐

  1. Java数组去重的多种方法,[Java教程]JavaScript常见的五种数组去重的方式

    [Java教程]JavaScript常见的五种数组去重的方式 0 2016-12-14 15:00:17 ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 ...

  2. C语言笔记 第三十五课 数组参数和指针参数分析

    第三十五课 数组参数和指针参数分析 思考:为什么C语言中的数组参数会退化为指针? 退化的意义 C语言中只会以值拷贝的方式传输参数 当向函数传递数组时:(错误的,设计当初的思路) 将整个数组拷贝一份传入 ...

  3. 001初学java笔记20211005

    概念 1 计算机包括硬件(hardware)和软件(software),软件提供指令控制硬件并使硬件完成特定任务. 2 程序设计:创建或开发软件. 3 硬件:总线(bus)--中央处理器(CPU),内 ...

  4. 初学HTML笔记记录1之基础标签与链接(pink老师)

    2021年11月29日学习记录: 一.代码部分 <!DOCTYPE html>document type文档类型声明此为HTML5的版本 <html lang="en&qu ...

  5. 剑指offer编程题Java实现——面试题3二维数组中的查找

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 下面是我实现的代码,修 ...

  6. 剑指offer笔记(四)二维数组中的查找

    二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右的顺序递增,每一列都按照从上到下的顺序递增,判断一个数是否在数组中 例如: 1 2 8 9 2 4 9 12 4 7 10 13 6 8 ...

  7. 初学Java (不要再删了!!!)

    前言 这是我学Java时的作业.大概用了半个月时间.之前写出来一篇篇放到QQ空间,现在总结到一块.内容很多,都是Java基础内容.有很多写好的代码.有个朋友请教Java内容.我就把作业给她看,备她使用 ...

  8. java 文件名排序_Java笔记:像win里一样文件名排序

    *********************************************** *月球正一日一日远离TA的亿年CP,* *而遥远^遥远的仙女却向往璀璨的银河!"* ***** ...

  9. Java笔记整理五(Iterator接口,泛型,常见数据结构(栈,队列,数组,链表,红黑树,集合),jdk新特性,异常,多线程,Lambda表达式)

    Java笔记整理五 1.1Iterator接口 Collection接口与Map接口主要用于存储元素,而Iterator主要用于迭代访问(即遍历)Collection中的元素,因此Iterator对象 ...

最新文章

  1. 轻松学Pytorch – 年龄与性别预测
  2. jboss1.7_在JBoss 7中使用HA Singleton
  3. 鸿蒙os智慧屏体验,华为智慧屏首发体验!搭载鸿蒙OS+AI芯片,还有AI教你健身
  4. flash特效原理:图片滑动放大效果(2)
  5. LeetCode 1933. 判断字符串是否可分解为值均等的子串
  6. JDK源码解析之Java.util.Collection
  7. C++ queue队列如何遍历
  8. MYISAM表的.frm、MYI损坏,丢失的修复方法
  9. blender 中文手册 Blender从入门到精通
  10. python会自动释放内存吗_没白熬夜,终于把Python的内存管理机制搞明白了
  11. 使用Intellij idea 来创建一个购物网站——易买网
  12. 【直播录像】FLV缺帧视频处理方案
  13. 微信翻译生日快乐的代码_微信表情翻译表白代码彩蛋大全 微信表情加符号翻译意思全解...
  14. UltraISO 软碟通制作 Windows 7 系统 U 盘启动盘
  15. [SHOI2017]期末考试
  16. OneZero第一次站立会议Sprint Planning Meeting(2016.3.21)
  17. 精通Apache Flink读书笔记
  18. 如何快速将磁盘写满!!!
  19. 使用CStdioFile::ReadString来逐行读取文件
  20. 我们见面吧,钛媒体年度国际大会“坚定”来了!

热门文章

  1. vs2017 开发工具颜色_2017年排名前50位的开发人员工具
  2. 小米组织架构调整成立技术委员会 强化技术引领 增强互联网成色
  3. echarts 横向条形图 对比
  4. 再介绍一篇最新的Contrastive Self-supervised Learning综述论文
  5. MB/s与Mbit/s的区别!!!
  6. 记念陪伴了我这么久的电脑
  7. php发送gmail,汇总PHPmailer群发Gmail的常见问题
  8. 微信小程序:小程序开发者注册步骤
  9. ubuntu18.04 安装java
  10. 电商平台退货管理教程