第七章 数组

7.1 数组概述
数组是相同数据类型并按照一定的先后顺序排列组合而成的集合。
每个数据称为元素,每个元素通过一个索引来访问。
数组的三个基本特点:
1.长度确定,数组一旦被创建,大小不可改变。
2,每个元素必须是相同类型,不允许出现混合类型。
3,数组类型可以是任何数据类型,包括基本类型和引用类型。
4,数组变量属于引用变量。

数组也可以看成对象,数组中的每个元素,相当于该对象的成员变量。
Java中的对象是在堆中存储的,数组无论是保持原始类型还是其他类型
数组对象本身是在堆中存储。

7.2 创建数组和初始化
7.2.1 数组声明
以以一维数组为例:
type[] arr_name;//推荐使用
Type arr_name[];

 声明数组的时候并没有实例化对象,只有在实例化数组对象时,jvm才分配空间,这时才与长度有关。声明一个数组的时候并没有真正创建数组。构造一个数组必须指定长度。创建基本类型一维数组:public static void main(String[] args){int[] s = null;//声明数组 s = new int[10];//给数组分配空间 for(int i = 0;i<10;i++){s[i] = 2*i+1;//给数组元素赋值 }} 创建引用类型的一维数组:class Man{private int age;private int id;public main(int age,int id){super();this.age = age;this.id = id;}}public class AppMain{public static void main(String[] args){Man[] mans;//声明引用类型数据mans = new Man[10]//给引用类型数组分配空间Man m1 = new Man(1,11);Man m2 = new Man(2,22);mans[0] = m1;//给引用类型元素赋值 mans[1] = m2; //给引用类型元素赋值 }}7.2.2 初始化数组的初始化方式有三种:静态,动态,默认 1,静态初始化:除了用new关键字来产生数组之外,还可以直接在定义数组的同时为数组元素分配空间并赋值。int [] a = {1,2,3,4};//静态初始话基本类型 Man[] mans = {new Man(1,1),new Man(2,2)};//静态初始化引用类型2,动态初始化指数组定义与维数组元素分配空间并赋值的操作分开进行int[] a1 = new int[2]//动态初始化数组先分配空间a1[0] = 1;//给数组元素赋值 a2[1] = 2;//给数组元素赋值3,数组的默认初始化数组是引用类型,他的元素相当于类的实例变量,因此数组一经分配空间其中的每个元素也被按照与实例变量相同的方式隐式初始化。int a2 = new int[2];//默认值(0.0 )boolean b = new boolean[2];//默认值(false,false) String[] s = new String[2] //默认值 (null.null)

7.3 常用数组操作(遍历和复制)
遍历:通过循环遍历数组的所有元素。
复制:将某个数组的内容复制到另一个数组中。

7.3.1 数组遍历数组元素下标的合法区间式[0,length-1]。通过下边遍历元素,遍历时可以读取元素的值和修改元素的值。使用循环初始化和遍历数组public class Test{public static void main(String[] args){int[] a= new int[4];//初始化数组元素的值for(int i = 0;i<a.length-1;i++){a[i] = 100*i;} //读取元素的值for(int i=0;i<length-1;i++){System.out.println(a[i]);} }} 7.3.2 for-each循环增强for循环专门用来读取数组和集合中的所有元素,即对数组进行遍历。public class Test{public static void main(String[] args){String[] string = {"aa","bb","cc","dd","ee"};for(String temp:string){System.out.println(temp);} } } for-each增强for循环在遍历数组过程中不能修改数组中某元素。for-each仅实用于遍历,不涉及有关索引的操作。7.3.3 数组的复制System类包含一个:static void arraycopy(object src,int srcpos,object dest,int destpos,int length);将src数组里的元素值赋给dest数组的元素;srcpos用于指定从src数组的第几个元素开始赋值,length指定将src数组中的多少个元素赋给dest数组的元素 数组的复制public static void main(String[] args){String[] s = {"baidu","jindong","tianmao","ali"};String[] sBak = new String[6];System.out.println(s,0,sBak,0,s.length);for(int i = 0;i<sBack.length;i++){System.out.print(sBak[i]+"\t");}} 7.3.4 Java.util.Array类Arrays类提供了排序,查找,填充,打印内容等常见的操作//使用Arrays类输出数组中的元素import java.util.Arrays;public class Test{public static void main (String[] args){int [] a = {1,2};System.out.println(a);//打印数组引用值 System.out.println(Arrays.toString(a))//打印数组元素值 }} 此处的Arrays.toString()方法是Arrays类的静态方法。//使用Arrays类对数组进行排序import java.util.Arrays;public class Test{public static void main(String[] args){int [] a ={1,4,3,6,89,0,2,7};System.out.println(Arrays.toString(a));Arrays.sort(a);Syatem.out.println(Arrays.toString(a));}} //使用Arrays类对数组进行排序二(Comparable接口的使用)import.java.util.Arrays;public class Test{public static void main(String[] args){Man[] msMans = {new Man(3,"a"),new Man(60,"b"),new Man(2,"c")};Arrays.sort(msMans);System.out.println(Arrays.toString(msMans)); }} class Man implements Comparable{int age;int id;String name;public Man(int age,String name){super();this.age = age;this.name = name;}   public String toString(){return this.name;}public int compareTo(Object o){Man man = (Man) o;if(this.age<man age){return -1;}if(this.age>man.age){return 1;}return 0;}}使用Arrays类实现二分法查找import.javca.util.Arrays;public class Test{public static void main(String[] arge){int[] a = {1,3,4,66,44,22,443};System.out.printin(Arrays.toString(a));Arrays.sort(a);//使用二分法查找必须先对数组排序System.out.println(Arrays.toString(a));//返回排序后新的索引位置,若未找到返回负数System.out.println("该元素的索引:"+Arrays.binerySearch(a,12)); }} //使用Arrays类对数组进行填充import.java.util.Arrays;public class Test{public static void main(String[] args){int[] a ={1,3,6,2,5};System.out.println(Arrays.toString(a));Arrays.fill(a,2,4,10);//将2到4索引的元素替换为100System.out.println(Arrays.toString(a)) ;}}

7.4 多维数组
多维数组可以看成以数组为元素的数组。
一般实际开发中使用少,最多到二维数组,一般使用容器。

 二维数组的声明public class Test{public static void main(String[] args){//java中多维数组的声明和初始化应按照从低到高的顺序进行int [] [] a =new int[3][];a[0] =new int [2];a[1] = new int[4];a[2] = new int[3];//int a1[][] =new int [][4];非法  }} 二位数组静态初始化public class Test{public static void main(String[] args){int[][] a ={{1,2,3},{3,4},{3,5,6,7}};System.out.println(a[2][3])}} 二维数组的动态初始化import.java.util.Arrays;pulic class Test{public static void main(String[] args){int[][] a = new int[3][];a[0] = new int[] {1,2,3};a[1] = new int[]{4,6};a[2] = new int[](9,7);System.out.println(a[2][3]);System.out.println(Arrays.toString(a[0]));System.out.println(Arrays.toString(a[1]));System.out.println(Array.toString(a[2]));}} 获取二维数组长度//获取二维数组的一维数组的长度System.out.println(a.length) ;//获取二维数组的第一个数组长度 System.out.println(a[0].length);

7.5 用数组存储表格数据

7.6 冒泡排序算法
7.6.1 冒泡排序的基础算法
冒泡算法原理:
重复的访问要排序的数列,一次比较两个元素,
如果他们的顺序错误,就把他们的顺序交换过来 ,
这样越大的元素就会经由交换慢慢的"浮现"到数列的顶端。

 冒泡算法的运作步骤:1,比较相邻的元素,如果第一个比第二个大就交换两者。2,对每一对相邻袁元素做相同工作,从开始的第一对到末尾的最后一对。完成这一步,最后的元素应该是最大的。3,针对所有元素重复上面的步骤,除了最后一个。4,持续对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。//冒泡排序基本算法import.java.util.Arrays;public class Test{public static void main(String[] args){int [] values = {7,45,322,1,9,55};bubbleSort(values);System.out.println(Arrays.toString(values));}public static void bubbleSort(int[] values){int temp;for(int i = 0;i<value,length;i++){for(int j = 0;j<value.length-1;j++){if(values[j]>values[j+1]){temp = values;values[j]=values[j+1];values[j+1]=temp;}}}}} 7.6.2 冒泡排序的优化算法冒泡排序特点:1,整个数列分成两部分,前面是无序,后面是有序。2,初始状态下整个数列都是无序数列,有序数列为空。3,每一次循环可以让无序数列中最大的数排到最后,即有序数列的元素个数增加1,则有序数列不用再顾及。4,每一次循环都从数列的第一个元素开始比较,依次比较相邻元素,比较到无序数列的末尾即可(而不是数列的末尾)。如果前一个数列的值大于后一个 ,则两者减缓位置。5,每一次判断数组元素是否发生了交换,如果,没有发生,则说明此时数组就已经有序,不需要再进行比较了,此时可以终止比较。//冒泡排序的优化算法import.java.util. Arrays;public class Test{public static void main(String[] args){int[] value = {3,2,1,5,6,4,9,7};bubbleSort(values);System.out.println(Arrays.toString(values));}public static void bubbleSort(int[] args){int temp;int i;//外层循环:N个元素排序,则至多需要n-1次循环for(int i=0;i<values.length-1;i++){//定义一个布尔类型的变量,标记数组是否已经达到有序状态boolean flag = true;for(int j = 0;j<value.length-1-i;j++){//如果前一个元素大于后一个元素,就交换两元素的值temp = values[j];values[j] = values[j+1];values[j+1] = temp;//本次发生了交换,表明该数组在本次循环属于无序状态,需要继续比较。falg = false; } } //根据标记量的值判断数组是否有序,如有有序则退出,无序则继续循环。 if(flag){break;} }}

7.7 二分检索/折半检索(binary search)
二分法检索的基本思想:
假设数组中的元素从小到大有序的排列在数组中,首先将给定中值 key
与数组中间位置上元素的关键码key进行比较,如果相等则检索成功。
否则,若key小则在数组的前半部分中继续进行二分检索。
若key大则在数组的后半部分中继续进行二分检索。
这样经过一次比较,缩小了一般的检索区间,如此进行下去,直到检索成功或失败。

二分检索的基本算法:import.java.util.Arrays;public class Test{public static void main(String[] args){int [] arr = {30,23,54,12,89,3,9,8,100,120};int searchWard = 23;//所要查找的数Arrays.sort(arr);//二分检索之前一定要对数组元素排序System.out.println(Arrays.toString(arr));System.out.prinyln(searchWord+"元素的索引:"+binarySearch(arr,searchWoed));}public static void int binarySearch(int[] array,int value){int low = 0;int high = array.length-1;while(low<=high){int middle = (low + high)/2;if(value == array[middle]){return middle;//返回查询到的索引位置 } if(value>array[middle]){low = middle+1;} if(value<array[middle]){high = middle-1;}}return -1;//上面的循环完毕,说明未找到。 }}

java 第七章 数组相关推荐

  1. 第七章数组答案C语言,C语言复习题及答案-第七章-数组

    . WORD版本第七章数组 (8学时) 学习目的与要求: 1 .重点掌握一维数组的定义和引用: 2 .基本掌握二维数组的定义和引用: 3 .重点掌握字符型数组的定义与引用: 4 .能正确使用字符串处理 ...

  2. 第七章数组答案C语言,c语言复习题及答案第七章数组.docx

    第七章数组(8学时) 学习目的与要求: 1.重点掌握一维数组的定义和引用: 2.基本掌握二维数组的定义和引用: 3.重点掌握字符型数组的定义与引用: 4.能正确使用字符串处理函数: 5.学会使用数组解 ...

  3. 第七章数组实验实验报告(第一部分)

    实验项目:第七章数组实验 姓名:谢丽萍  时间:2019年5月29号   地点:514教室 一.实验目的与实验要求 ①7.3.1-1本实验旨在巩固学生对数组这种数据结构的理解,增强程序设计能力.在这个 ...

  4. 第七章 数组成绩汇总

    第七章 数组成绩汇总 学号 姓名 作业标题 作业地址 提交日期 分数 113120180135 周萌 第七章 数组实验 https://www.cnblogs.com/AwakenZed/p/1094 ...

  5. Java 第7章 数组

    第七章 (数组) 为什么需要数组java 考试结束后,老师给张浩分配了一项任务,让他计算全班(30人)的平均分int stu1=95; int stu2=95;int stu3=95;int stu4 ...

  6. java第七章jdbc课后简答题_java学习路线流程

    第一阶段JavaSE: 第一章:jdk的安装与配置 第二章:Java基础语法: 变量.常量.数据类型.关键字 运算符和表达式:运算符:+.-.*./ 表达式:正则表达式 关系及逻辑运算符:关系运算符: ...

  7. java第七章jdbc课后简答题_jsp编程基础第七章习题

    第七章数据库访问 一.选择题 1.下面哪一项不是JDBC的工作任务?() A)与数据库建立连接B)操作数据库,处理数据库返回的结果 C)在网页中生成表格D)向数据库管理系统发送SQL语句 2.下面哪一 ...

  8. java第七章学习笔记:访问控制---java世界的卫兵

    [因为每一章都篇幅比较长(10多页,难免有的地方会写错字,如发现请指正,本人不胜感激)] [今天看到我居然有一名粉丝,内心还是有点小激动的,之间我是一枚不是很喜欢技术的妹纸,但是从现在开始,我从被动学 ...

  9. esp8266接收到的数据如何存放到数组中_愉快地学Java语言:第七章 数组

    导读 本文适合Java入门,不太适合Java中高级软件工程师.本文以<Java程序设计基础篇>第10版为蓝本,采用不断提出问题,然后解答问题的方式来讲述.本篇文章只是这个系列中的一篇,如果 ...

  10. JAVA第七章-- 面向对象核心技术总结

    目录 7.1 类的封装 代码7_1 结果 代码7_2 结果 代码7-3 结果 代码7_4 结果 7.2 类的继承 7.2.1 extends 关键字 代码7_5 结果 7.2.2 方法的重写 1.重写 ...

最新文章

  1. 关于.NET玩爬虫这些事 【初码干货】
  2. R语言修改dataframe的列名(column name)实战
  3. CF724G Xor-matic Number of the Graph(线性基+组合数)
  4. android SurfaceView
  5. python读取sqlserver的数据_Python:使用并发未来进程P读取sqlserver数据
  6. MFC多视图与重绘效率
  7. 软件测试——0422作业
  8. MySQL8web安装_mysql 8.0.18 安装配置图文教程
  9. pycharm 远程调试图文_pycharm远程调试openstack的图文教程
  10. git 创建和修改ssh_key
  11. 做开源,兴趣是最好的源动力 | 龙蜥开发者说第1期
  12. win7 安装SQL Server 2005 开发版 图文教程
  13. ASP.NET动态网站开发培训-26.在线编辑器FreeTextBox的使用
  14. oracle查询超过一千行报错,Oracle数据库查询用 where in 查询的项超过1000条的解决方案...
  15. java工程师怎么找兼职,快来看鸭~
  16. hdoj6441(勾股数)(模板 重要)
  17. 钉钉第三方企业应用开发快速入门
  18. 【代码审计】--- php代码审计方法
  19. getservbyname()函数与getservbyport()函数
  20. 人工智能与中医-脉波篇

热门文章

  1. 地理信息系统软件学习:流域提取以及地图绘制(简单版)
  2. 驱动精灵安装的流氓软件如何卸载、及删除驱动精灵
  3. 为什么会有这么多中间表?
  4. Linux服务篇之DNS域名解析服务
  5. vs为什么打了断点不断_2019年丹麦羽毛球公开赛焦点对阵:林丹VS塞帕拉内斯 石宇奇 VS 马克卡尔尤B...
  6. 企业发展滞缓,还不是因为踩了这四个数据大坑!
  7. CH552 USB HID键盘
  8. 《华为工作法》6 华为的成功不是一个人的
  9. java中j是什么意思_i 1 j 是什么意思 i.j.k是什么意思
  10. android 实现表格横向混动_凌派锐·混动:技术赋能下的越级表现