动力节点—day05
- 数组
- Java语言当中的数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object
- 数组实际上是一个容器,可以同时容纳多个元素(数组是一个数据集合),多个数据元素的类型必须是一致的
- 数组当中可以存储基本数据类型的数据,也可以存储引用数据类型的数据
- 数组因为是引用数据类型,所以数组对象是在对内存当中
- 数组当中存储引用数据类型的话,实际上存储的的是Java对象的内存地址,不能直接存储Java对象
- 数组一旦创建,在java中规定,长度不可变
- 数组分类:一维数组、二位数组、三维数组、多维数组.......
- 所有数组都有length属性,用来获取数组中元素的个数
- 数组中每个元素都是由下标的,用来进行存取,下标从0开始,以1递增,最后一个元素的下标是length-1
- 数组在内存方面存储的时候,数组中元素内存地址是连续的,所有数组都是拿第一个小方框的内存地址作为整个数组对象的内存地址
- 数组数据结构的优点和缺点
- 优点:
- 查询/检索某个下标上的元素时效率极高,可以说是查询效率最高的一个数据结构
- 为什么检索效率高?
- 第一:每一个元素的地址在空间上是连续的
- 第二:每一个元素类型相同,所以占用空间大小一样
- 第三:知道第一个元素的内存地址,知道每一个元素占用空间大小,又知道下标,所以通过第一个表达式就可以计算出某个下标上元素的内存地址,直接通过内存地址定位元素,所以数组的检索效率是最高的,所以无论一个数组有多少元素,检索效率都是一样的
- 缺点
- 第一:由于为了保证数组中每个元素的内存地址连续,所以在数组上随机增加或者删除的时候,效率低,因为随机增删元素会涉及到后面元素的统一向前或向后位移的操作(除了最后一个元素)
- 第一:数组不能存储大数据量,为什么?因为很难找到一块特别大的连续的内存空间
- 优点:
- 一维数组
- 声明/定义一个一维数组?
- 语法格式:int[] array1 或 int[] array1=new int[]{10,20,30};
- 初始化一维数组(两种方式)
- 静态初始化:int[] array={100,200,100,400};
- 动态初始化:int[] array=new int[5];//初始化一个5个长度的一维数组,并且每个元素默认值0
- 如果访问的元素超出了某个数组的范围,会发生ArrayIndexOutOfBoundsException数组下标越界异常
- 什么时候采用动态初始化方式,什么时候采用静态初始化方式:
- 当创建数组的时候,确定数组中存储了哪些元素,采用静态初始化方式
- 当创建数组的时候,不确定数组中存储了哪些元素,采用动态初始化方式
- 静态初始化的形式参数不能是{10,20,30},必须写成new int[]{10,20,30}
- main方法
- 是程序员负责写出来,JVM负责调用,JVM调用的时候会传入一个String类型的数组,JVM默认传递过来的数组长度为0,所以args不是null
- 如果这样运行程序,java ArrayTets abc def xyz,那么这个时候JVM会自动将abc def xyz通过空格方式进行分离,分离完成之后,自动放到String[] args数组当中
- 传递参数的位置:Run—>Run Configurations—>Arguments—>Program arguments
- 在Dos窗口中:D:\>java Test abc def xyz
- 在判断两个字符串是否相等,需要使用equals方法,username.equals("admin"),如果修改为"admin".equals(username)能够避免空指针异常
- 数组的扩容:
- java中对数组的扩容是先创建一个大容量的数组,然后将小容量的数据一个个拷贝到大数组当中
- System.arrayCopy(原数组,原数组下标开始位置,目标数组,目标数组下标开始位置,扩容几个)
- 声明/定义一个一维数组?
- 二维数组
- 二维数组其实是一个特殊的一维数组,特殊在这个一维数组中每一个元素是一个一维数组,
- eg:int[][] array2={{100,200,300},{100,200,300,400,500},{100,200,300}};
- 三维数组其实是一个特殊的二位数组,特殊在这个二维数组中每一个元素是一个二维数组
- eg: int[][][] a = {{{1, 2}, {3, 4, 5},{3, 4, 5}}, {{6, 7}, {8, 9, 10, 11}}};
- 二维数组的静态初始化
- int[][] array2={{100,200,300},{100,200,300,400,500},{100,200,300}};
- array2[0][0]表示第一个一维数组中的第一个元素
- 数组数据结构的优点和缺点
- 常见算法:(以下算法在以后的Java实际开发中我们不需要使用的,因为Java已经封装好了,直接调用就行,只不过以后面试的时候,可能会有机会碰上)
- 排序算法:
- 冒泡排序算法(大气泡先出去)
- 选择排序算法
- 每一次从这堆“参与比较的数据当中”找最小值,拿着这个最小值和“参与比较的数据中最前面的”交换位置
- 选择排序比冒泡排序好在,每一次的交换都有意义
- 两个比较次数不变,但交换次数减少
- 查找算法
- 也可以不用算法,一个一个挨着找,知道找到为止
- 二分法查找,这个效率高,数组中出现相同的元素,不一定找的是第一个
- 算法实际上在Java中不需要精通,因为java已经封装好了,要排序调用方法就行,例如,Java中提供了一个数组工具类java.util.Arrays,其中有一个sort方法,可以排序,静态方法,直接使用类名调用就行,eg:折半查找Arrays.binarySearch(arr,5);
- 排序算法:
动力节点—day05的更多相关文章
- 分布式技术EJB3_分库架构 - 【动力节点官网】北京Java …
分布式技术EJB3_分库架构 - [动力节点官网]北京Java … http://www.bjpowernode.com/xiazai/2220.html <程序天下--EJB JPA数据库持久 ...
- 001_动力节点_SpringMVC4_SpringMVC简介
1.视频的下载地址是 下载地址:百度云盘 链接:http://pan.baidu.com/s/1ge58XW3 密码:yd5jhttp://www.java1234.com/a/javaziliao/ ...
- 动力节点Java培训告诉你Java线程的多功能用法
现在的java开发可谓是八仙过海各显神通啊!遥想当下各种编程语言萎靡不振,而我Java开发异军突起,以狂风扫落叶之态,作为Java培训行业的黄埔军校,为了守护Java之未来,特意总结了一些不被人所熟知 ...
- [Java语言] 《struts2和spring MVC》的区别_动力节点
1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...
- 动力节点 mysql 郭鑫 34道经典的面试题三
1.第十五题 15.列出受雇日期早于其直接上级的所有员工编号.姓名.部门名称 思路一:第一步将emp a看成员工表,将emp b 看成领导表,员工表的mgr字段应该等于领导表的主键字段 mysql&g ...
- 动力节点 mysql 郭鑫 34道经典的面试题二
13.有3个表S(学生表),C(课程表),SC(学生选课表) S(SNO,SNAME)代表(学号,姓名) C(CNO,CNAME,CTEACHER)代表(课号,课名,教师) SC(SNO,CNO,SC ...
- 动力节点 mysql 郭鑫 34道经典的面试题
DROP TABLE IF EXISTS `dept`; CREATE TABLE `dept` ( `DEPTNO` int(2) NOT NULL COMMENT '部门编号', `DNAME` ...
- Java学习day05
Java学习day05 [switch]属于选择结构,分支语句 语法结构: /* switch(int或string类型字面值或变量) { case int或string类型字面值或变量 : java ...
- Java Web 学习路线
实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了.大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算 ...
- Java编程中的美好
java程序员如何写出"优美"代码,动力节点告诉你怎么办: 1.注释尽可能全面 对于方法的注释应该包含详细的入参和结果说明,有异常抛出的情况也要详细叙述:类的注释应该包含类的功能说 ...
随机推荐
- 记一次spark数据倾斜实践
参考文章: 大数据项目--倾斜数据的分区优化 数据倾斜概念 什么是数据倾斜 大数据下大部分框架的处理原理都是参考mapreduce的思想:分而治之和移动计算,即提前将计算程序生成好然后发送到不同的 ...
- PHP 0817
原题链接:http://www.wechall.net/challenge/php0817/index.php 点看题目 意思是他有一个php写的系统,但是他很容易收到LFI的影响,然后我们的任务就是 ...
- C++初阶(stack+queue)
stack stack介绍 stack是一种先进后出的数据结构,只有一个出口,类似于栈.stack容器哦允许新增元素,移除元素,取得栈顶元素,但是除了最顶端之后,没有任何其他办法可以存取stack的其 ...
- ATM项目详解
内容概要: ATM项目 代码实操流程 ATM项目 # 需求: """ - 额度15000或自定义 - 支持多账户登录 - 可以查看账户余额 - 可以提现(可自定义手续费比 ...
- VsCode搭建一个React项目
安装Node.js 使用 npm -v检查安装成功 目前的 node 中都会自带 npm 所以不需要重新下载 直接切换至淘宝镜像即可 1.临时使用 :npm --registry https://re ...
- 《Java口袋指南》-内容总结
Java口袋指南 一.语言 1.命名 类名:大驼峰 泛型:E标识集合元素 方法名:小驼峰 变量名:小写 包名:小写或下划线 2.词法元素/token 字符串压缩优化 ...
- 强化学习调参技巧二:DDPG、TD3、SAC算法为例:
1.训练环境如何正确编写 强化学习里的 env.reset() env.step() 就是训练环境.其编写流程如下: 1.1 初始阶段: 先写一个简化版的训练环境.把任务难度降到最低,确保一定能正常训 ...
- uni框架引入外部图标
说明 在使用uni框架的uni-nav-bar自定义导航栏的时候我想要引用外部的图标,但是似乎这个好像只能引入uni框架内置的图标 所以我只能把uni的图标进行增加处理,这样引入图标的方式就和正常的引 ...
- VmWare安装Centos后配置Net网络SSH链接问题看这一遍就够了
1:首先安装VmWare 2:启动时在安装对应的Linux版本,网络就默认 net即可 3:都安装好了之后,注意有一个大坑,输入的账号密码都不能准确登录 最后发现是linux默认的输入法没有启用电脑键 ...
- JavaScript:this指针
this指针,存储的是一个内存地址,如同变量一样,指向一块内存区域: 而这个内存区域,保存的就是一个对象的数据,那么这个对象是什么呢? 通常来说,this指针,主要是用在方法(函数)中,用来指向调用方 ...