1.什么是数组?

顾名思义,即为数据的组合或集合,数组就是用来表示一组数据的。

比如没有数组之前,我们要存储多个姓名的信息

String name1;

String name2;

String name3;

有了数组之后,我们可以这样

String[] names;

2.数组的特点:

(1)数组是用来存储一组相同数据类型的数据结构。

(2)数组中的元素可以是任何数据类型(基本类型和引用类型)。

int[] ints

double[] doubles

String[] names

(3)数组有一个对应的索引,可以通过索引访问数组中的每个元素。(0 –– n-1)

(4)数组被创建好之后,它的大小(数组长度)是不能改变的,但是数组中的各个元素是可以被改变的。

int[] ages = {1,2,3,4,5,6};

总结:

(5)数组变量属于引用数据类型。// 所有的任何数组都是继承了Object

int[] a ; a是引用数据类型(关于引用数据类型的细节,面向对象部分再来补充说明)

3.掌握数组的基本用法

3.1.一维数组的声明

一维数组声明有两种方式:

数据类型 变量名 = 变量值

数据类型[] 数组变量名;(推荐)

数据类型 数组变量名[];

注意:声明数组时不能指定数组长度。例如下面写法是错误的。

int[5] array;//语法错误,编译不通过。

int[] array;//正确写法

3.2.一维数组的创建

一维数组的创建,采用new来申请内存空间

Java中使用关键字new 创建数组对象,指定数组的大小,给数组元素的存储分配空间

格式:数组变量名 = new 数组元素的类型 [数组元素的个数];

array = new int[5];

例如:

int[] a; //声明一个int类型的数组

a = new int[5]; //创建一个int类型的数组,长度为5(存储5个int整数的数组),并让变量a指向该数组;

3.3.一维数组的赋值

静态初始化是指,在创建数组对象的同时对数组进行初始化。

静态初始化有两种方式:

1、int[] a = new int[]{1, 2, 3}; //定义并创建数组,并初始化数组的元素为 1、2、3,同时数组的长度也被限定为为3。

2、int[] a = {1, 2, 3}; //效果同上

注意:不能这么写 int[] a = new int[3]{1,2,3};

以上两种方式均不需要定义数组的长度,数组的长度由初始化时元素的个数来决定。

动态初始化是指把数组的创建和数组的初始化分开完成。

例如:

int[] a = new int[3];

a[0] = 3; //通过元素索引(下标)来给数组元素赋值

a[1]=4;

a[2]=5;

问题:动态赋值和静态赋值怎么选择?

3.4.访问数组的元素

通过下标访问数组元素,上述案例已经有了,注意一点:数组的下标从0开始以及数组的边界问题

3.5.一维数组的遍历

需掌握两种方式,并知道他们的区别

1,采用最初学习for循环方式,这种方式可以打印出数组的元素

2,采用一种新的循环遍历方式,增强for循环,这种方式只能输出数组元素,但访问不到下标

3.6.练习1

声明一个数组,并向其存储“5,8,1,7,6,19,10,3”这几个数字,

分别采用静态和动态的方式进行数据的初始化

最后采用两种循环方式打印出数组的数据。

创建方法,用于打印数组的元素,方便后续调用

3.7.练习2

开发一个随机抽取学员回答问题的程序

3.8.总结

要求掌握的技能如下:

数组的声明及初始化

数组的遍历

数组的下标特点

4.算法阶段(查找+排序)

下面进入算法阶段:

分两个步骤来学习:

第一:分析这种算法的规律(最关键)-画图来说明

第二:采用程序的方式来描述这种规律

每讲完一种算法,练习一次

4.1.难点一:数组的查找

4.1.1.顺序查找(简单)

应用场景:数组的元素是没有顺序的,挨个找

4.1.2.二分法查找

应用场景:二分法查找的前提是数组已经排好序了

查找的策略,就好比我们猜数字游戏的策略。

基本思想:每次都猜中间的那个数字,猜大了或小了,就少了一半的元素,然后继续猜中间的数字

首先要明确一个查找的规则,就是先假设是中间的数字,如果是,那就找到了。

如果不是,则分两种情况考虑

–中间的数大了,则继续取前面一排数字的中间数来比较,规则同上

–中间的数小了,则继续取后面一排数字的中间数来比较,规则同上

规律是,根据情况,改变的是三个索引的值

min=0;

max=array.length-1;

mid=(max+min)/2;

关键条件,循环条件,根据两种情况来分析和找结论

max>=min

4.2.求数组的最大数和最小数

求最大值

求最小值

public class Test5MaxMin{

public static void main(String[] args){

int[] nums = {1,5,6,11,88,33,99,10,2,-1,-9};

//max

int max = nums[0];

for(int i=1;i

4.3.难点二:数组的排序

4.3.1.冒泡排序(最重要)

5,8,1,7,6 ,3

?????8

????7,8

1,3,5,6,7,8

冒泡排序,就是每次比较,大的元素往后挪,比较完第一遍后,最大的元素排到了数组的最后一位

第二次比较,还是从第一个元素开始和后面的比较,把剩余的最大的元素拍到数组的倒数第二位,第一轮比较的最大元素不参与比较

依次类推。

总结:相邻两个元素两两比较,大的往后挪,第一次比较结束后,最大的元素在数组的最大索引处。

第一步:

int[] source = {5,8,1,7,6 ,3 };

if(source[0]>source[1]){

int temp = source[0];

source[0]=source[1];

source[1]=temp;

}

if(source[1]>source[2]){

int temp = source[1];

source[1]=source[2];

source[2]=temp;

}

第二步:

将上述代码变成一个循环结构

for(int i=0;i<=nums.length-2;i++){

if(nums[i] > nums[i+1]){

int temp = nums[i];

nums[i] = nums[i+1];

nums[i+1] = temp;

}

}

第三步:每一次都是在改变临界条件

for(int i=0;i<=source.length-2-0;i++){//-0是为了总结出后面的外层循环规律

if(source[i]>source[i+1]){

int temp = source[i];

source[i]=source[i+1];

source[i+1]=temp;

}

}

第四步:

再嵌套一层循环来改变这个值

for(int j=0;j<=source.length-2;j++){

for (int i = 0; i <= source.length - 2 - j; i++) {

if (source[i] > source[i + 1]) {

int temp = source[i];

source[i] = source[i + 1];

source[i + 1] = temp;

}

}

}

4.3.2.选择排序(选择一个位置来存放最小的元素)

基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

第一轮:

int k = 0;

for(int i=1;i<=ints.length-1;i++){

if(ints[k]>ints[i]){

k = i;

}

}

int temp = ints[0];

ints[0] = ints[k];

ints[k] = temp;

第二轮:

就是将k新增1,即从1开始

k = 1;

for(int i=2;i<=ints.length-1;i++){

if(ints[k]>ints[i]){

k = i;

}

}

temp = ints[1];

ints[1] = ints[k];

ints[k] = temp;

以此类推,所以通过外层循环来控制即可

for(int j=0;j<=ints.length-2;j++){

int k = j;

for(int i=j+1;i<=ints.length-1;i++){

if(ints[k]>ints[i]){

k = i;

}

}

int temp = ints[j];

ints[j] = ints[k];

ints[k] = temp;

}

5.扩展

可变参数

继续认识main方法–args

数组专家Arrays

javaSE_06Java中的数组(array)的更多相关文章

  1. C++中的数组array和vector,lambda表达式,C字符串加操作,C++中新类型数组(数组缓存),多元数组,new缓冲

     使用C++风格的数组.不须要管理内存. array要注意不要溢出,由于它是栈上开辟内存. array适用于不论什么类型 #include<iostream> #include< ...

  2. javaSE_06Java中的数组(array)-练习

    (1),数组的两种遍历方式,顺序查找,二分查找,求最大最小数,冒泡排序,选择排序. public class Test1{ public static void main(String[] args) ...

  3. javaSE_06Java中的数组(array)-提高练习

    1.求1!+2!+3!+···+30!的和,定义一个方法 public class Test1{ public static void main(String[] args){ //1.求1!+2!+ ...

  4. javaSE_06Java中的数组(array)-思维导图

    思维导图看不清楚时: 1)可以将图片另存为图片,保存在本地来查看 : 2)右击在新标签中打开放大查看 (IE不支持,搜狗,360可以):

  5. js中的数组Array定义与sort方法使用示例

    Array的定义及sort方法使用示例 Array数组相当于java中的ArrayList  定义方法:  1:使用new Array(5  )创建数组 var ary = new Array(5): ...

  6. JS中有关数组Array的常用方法函数

    Array对象的方法主要有如下几种(我所知道的): concat()连接两个或多个数组,并返回结果,但是值得注意的是该方法并不改变数组本身,而仅仅返回一个数组连接的副本. push()在数组后面添加一 ...

  7. JavaScript中的数组Array

    抄自:https://www.jianshu.com/p/7e160067a06c js中数组的方法种类众多,有ES5之前版本中存在的,ES5新增,ES6新增等:并且数组的方法还有原型方法和从obje ...

  8. PIL中的Image和numpy中的数组array相互转换

    1. PIL image转换成array img = np.asarray(image) 需要注意的是,如果出现read-only错误,并不是转换的错误,一般是你读取的图片的时候,默认选择的是&quo ...

  9. JavaScript中的数组Array方法

    push(),pop()方法 push(),pop()方法也叫栈方法,push()可以理解成,向末尾推入,而pop()恰好相反,可以理解成从末尾移除(取得). var nums=[1,2,3,4]; ...

随机推荐

  1. PHPexcel数据导出

    使用PHPexcel数据导出,可以从网上下载phpexcel引入使用,下面是我做的简单的数据导出练习 一.下载phpexcel 二.引发这个导出(我这里是写了一个简单的点击事件) <div id ...

  2. Reids详解-抄本

    1.redis是什么 Redis 是一个基于内存的高性能key-value数据库.是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库. 2.redis的特点 ...

  3. URL传中文参数导致乱码的解决方案之encodeURI

    通过URL传中文参数时,在服务端后台获取到的值往往会出现乱码问题,解决方案有很多种,本文主要介绍如何通过encodeURI来解决中文乱码问题: first:前端传递参数的时候需要对中文参数进行两次en ...

  4. Winform 使用DotNetBar 根据菜单加载TabControl

    winform 如何使用TabControl 控件来做winform界面框架? 这样的效果: 首先菜单的窗口展示的承载器为TabControl 控件,这个控件本身包含多页面预览和页面初始化. 如图所示 ...

  5. 什么是Actor

    本文已.Net语法为主,同时写有Scala及Java实现代码 严肃的说,演员是一个广泛的概念,作为外行人我对Actor 模型的定义: Actor是一个系统中参与者的虚拟人物,Actor与Actor之间 ...

  6. 使用Java语言开发微信公众平台(六)

    在上一节课程中,我们来学习了微信公众平台最基础的一个接口--access_token,并且能够从微信公众平台中取到access_token. 那么,在本节课程中,我们要以上节课获取到的access_t ...

  7. mui开发app之webview是什么

    WebView(网络视图)能加载显示网页,可以将其视为一个浏览器,webview被封装在html5+,plus对象中,底层由java,OC实现. 先来谈谈我对webview的理解: 使用mui开发的a ...

  8. HashSet实现原理

    /* HashSet的实现原理: 往HashSet添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值 , 然后通过元素 的哈希值经过移位等运算,就可以算出该元素在哈希表中 ...

  9. IOS(一) 基础控件的介绍以及使用

    IOS的界面的制作,相对于Android来说 简洁了很多,虽然创建布局的方式都是两种(代码创建.布局文件) 但是Android中的xml布局文件在某些方面也属于代码创建,因为自己使用到得每一个属性 都 ...

  10. duboo解析的入口

    使用duboo只需要在spring配置文件做如下配置就好: < dubbo:provider timeout= "${default.dubbo.provider.timeout}&q ...