javaSE_06Java中的数组(array)
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)的更多相关文章
- C++中的数组array和vector,lambda表达式,C字符串加操作,C++中新类型数组(数组缓存),多元数组,new缓冲
使用C++风格的数组.不须要管理内存. array要注意不要溢出,由于它是栈上开辟内存. array适用于不论什么类型 #include<iostream> #include< ...
- javaSE_06Java中的数组(array)-练习
(1),数组的两种遍历方式,顺序查找,二分查找,求最大最小数,冒泡排序,选择排序. public class Test1{ public static void main(String[] args) ...
- javaSE_06Java中的数组(array)-提高练习
1.求1!+2!+3!+···+30!的和,定义一个方法 public class Test1{ public static void main(String[] args){ //1.求1!+2!+ ...
- javaSE_06Java中的数组(array)-思维导图
思维导图看不清楚时: 1)可以将图片另存为图片,保存在本地来查看 : 2)右击在新标签中打开放大查看 (IE不支持,搜狗,360可以):
- js中的数组Array定义与sort方法使用示例
Array的定义及sort方法使用示例 Array数组相当于java中的ArrayList 定义方法: 1:使用new Array(5 )创建数组 var ary = new Array(5): ...
- JS中有关数组Array的常用方法函数
Array对象的方法主要有如下几种(我所知道的): concat()连接两个或多个数组,并返回结果,但是值得注意的是该方法并不改变数组本身,而仅仅返回一个数组连接的副本. push()在数组后面添加一 ...
- JavaScript中的数组Array
抄自:https://www.jianshu.com/p/7e160067a06c js中数组的方法种类众多,有ES5之前版本中存在的,ES5新增,ES6新增等:并且数组的方法还有原型方法和从obje ...
- PIL中的Image和numpy中的数组array相互转换
1. PIL image转换成array img = np.asarray(image) 需要注意的是,如果出现read-only错误,并不是转换的错误,一般是你读取的图片的时候,默认选择的是&quo ...
- JavaScript中的数组Array方法
push(),pop()方法 push(),pop()方法也叫栈方法,push()可以理解成,向末尾推入,而pop()恰好相反,可以理解成从末尾移除(取得). var nums=[1,2,3,4]; ...
随机推荐
- Docker改名为Moby了吗?
背景 在DockerCon17上,Docker发布了两个新的开源项目LinuxKit和Moby.而原来在Github上托管的docker也随着PR #32691的合入正式变为Moby.这究竟是什么情况 ...
- 学习java分为几个阶段,分别是什么?
多年前我自学的时候是很茫然,上网问问题,总是一堆外行的人说很难啊,你需要这样需要那样,不然就是,一堆人说一些空话,多看多写,买好书,我很无语,除了这些就没有自己的一些想法吗? 首先很多人认为学JAVA ...
- app测试特点
一.安装与卸载1.软件安装后是否可以正常运行:2.安装过程中是否可以中断3.安装空间不足时是否有相应的提示4.是否可以卸载应用(桌面卸载和应用卸载)二.权限测试1.扣费风险:包括发送短信.拨打电话.连 ...
- [ext4]空间管理 - 查找块
在文件系统中,当需要执行写操作时,肯定是需要查找需要写入的块.那么如何查找块哪? 在Ext4系统中,有两个函数是可能执行查找操作的:ext4_getblk().ext4_get_block(). ...
- Linux的kobject机制
作者:Younger Liu 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. sysfs文件系统下的每个目录对应于一个kobj,kset是kobj的封装,内 ...
- get和post提交数据的区别
get是客户端向服务器索取数据的请求,设定的初衷是,客户端(浏览器)给服务器发送请求,然后服务器再返回给客户端其要求的数据. 那么为什么说get也能提交数据呢? 我们仔细理解第一句话“客户端(浏览器) ...
- iOS-SQLite(FMDB)
在已经存在的表中,添加字段,更新表结构 /** Test to see if particular column exists for particular table in database @pa ...
- 跨交换机相同vlan内的通信(trunk模式)
当一个公司的小型局域网内部,处于不同楼层的主机处在同一个虚拟局域网内,连接到不同的交换机上,这时候就需要相同虚拟局域网内部的主机进行跨交换机进行通信. 通过设置交换机之间相连接的端口开启trunk模式 ...
- NSA Fuzzbunch分析与利用案例
Shadow Brokers泄露出一份震惊世界的机密文档,其中包含了多个 Windows 远程漏洞利用工具.本文主要介绍了其中一款工具Fuzzbunch的分析与利用案例 1 整体目录介绍 解压EQGR ...
- 关于ie的h5 刷新和ctrl+5刷新 以及图标刷新的问题
最近在做一个表单验证,当表单失去焦点的时候触发错误提示. 可是..... 火狐 欧朋 刷新都没有问题,而在ie edge 用f5刷新的时候 都能记住之前的焦点 造成提示混乱. 问题算是解决: < ...