JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组
个人博客网:https://wushaopei.github.io/ (你想要这里多有)
1、一维数组
1.1 数组的声明和初始化
声明方式:
String str[]; //不建议使用
String[] str2;
静态初始化:初始化和赋值同时进行
String[] str = new String[]{“aa”,”bb”}
String[] str2 = {“aa”,”bb”} //声明和初始化不可以分开
动态初始化:初始化和赋值分开进行
String[] str = new String[5];//5代表是数组的长度
说明: 无论是静态初始化还是动态初始化,数组一旦创建成功,数组的长度不可变。
1.2 调用数组中的元素
String[] names = new String[5];
- 数组的索引(下角标:是从0开始的
- 取值 :String str = names[0]
- 赋值 : names[0] = “aa”;
1.3 数组的属性 – length (数组的长度)
names.length;
1.4 数组的遍历
for (int i = 0; i < citys.length; i++) {
System.out.println(citys[i]);
}
1.5 数组元素的默认值
数组元素(要看具体的元素类型)的默认值和成员变量的默认值相同.
1.6 数组的内存分析
2、二维数组
2.1数组的声明和初始化
数组的声明:
String[][] names;
String[] names[]; //不建议
String names[][]; //不建议
静态初始化:
names = new String[][]{{“aa”,”bb”},{“cc”,”dd”}}
String[][] names = {{“aa”,”bb”},{“cc”,”dd”}}
动态初始化:
String[][] names = new String[3][2];
//3是二维数组的长度。2是二维数组元素的长度
String[][] names = new String[2][];
names[0] = new String[2];
names[1] = new String[3];
2.2调用数组中的元素
String name = names[1][0];
names[0][0] = “aa”; //赋值
2.3数组的属性 :length
String[][] s = new String[3][2];
s.length //数组的长度
s[0].length //二维数组中0位置上元素的长度
2.4数组的遍历
// 5.遍历二维数组的元素
for (int i = 0; i < aa.length; i++) {
String[] str = aa[i]; // 二维数组中的元素
for (int j = 0; j < str.length; j++) {
System.out.println(str[j]); // 遍历的是二维数组中元素(一维数组)的元素
}
}
//下面的为标准的二维数组元素的遍历方式
for (int i = 0; i < aa.length; i++) {
for (int j = 0; j < aa[i].length; j++) {
System.out.println(aa[i][j]); // 遍历的是二维数组中元素(一维数组)的元素
}
}
2.5 二维数组元素的默认值
1.二维数组元素的默认值是null
2.6 二维数组的内存分析
3、数组常见算法
// 求数组元素的最大值
public int getMaxNumber(int[] numbers) {
int max = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (max < numbers[i]) {
max = numbers[i];
}
}
return max;
}
// 求数组元素的最小值
public int getMinNumber(int[] numbers) {
int min = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (min > numbers[i]) {
min = numbers[i];
}
}
return min;
}
// 求数组元素的总和
public int getSum(int[] numbers) {
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum += numbers[i];
}
return sum;
}
// 求数组元素的平均值
public int getAvg(int[] numbers) {
int sum = getSum(numbers);
return sum / numbers.length;
}
// 数组的复制
public int[] getCopyArray(int[] numbers) {
int[] copyNumber = new int[numbers.length];
for (int i = 0; i < numbers.length; i++) {
copyNumber[i] = numbers[i];
}
return copyNumber;
}
// 数组的反转
public void reverse(int[] numbers) {
// 数组的反转
System.out.println();
for (int i = 0, j = numbers.length - 1; i < numbers.length / 2; i++, j--) {
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
//线性查找
public int searchNumber(int[] numbers,int findNumber){
int index = -1; //查找的数据所在的索引值。
for (int i = 0; i < numbers.length; i++) {
if(findNumber == numbers[i]){
index = i;
break;
}
}
return index;
}
//排序
//boo 为false从小到大,如果为true 从大到小
public void sort(int[] numbers,boolean boo){
if(boo){
for (int i = 0; i < numbers.length - 1; i++) { //循环几轮
for (int j = 0; j < numbers.length - 1 - i; j++) { // 循环几次
if(numbers[j] < numbers[j + 1]){
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
}else{
for (int i = 0; i < numbers.length - 1; i++) { //循环几轮
for (int j = 0; j < numbers.length - 1 - i; j++) { // 循环几次
if(numbers[j] > numbers[j + 1]){
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
}
}
冒泡算法:
冒泡排序:
for (int i = 0; i < numbers.length - 1; i++) { //循环几轮
for (int j = 0; j < numbers.length - 1 - i; j++) { // 循环几次
if(numbers[j] < numbers[j + 1]){
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
4、Arrays工具类的使用
5、数组常见异常
第一种 : 空指针异常 - NullPointerException
第二种 :下角标越界 - IndexOutofBoundsException
代码:
public static void main(String[] args) {
int[] numbers = new int[2];
//下角标越界
// numbers[2] = 5;
// System.out.println(numbers[2]);
// numbers[-1] = 5; //下角标越界
// System.out.println(numbers[2]);//下角标越界
//空指针异常
String[] persons = new String[2];
//将字符串中的字符全部转成大写
System.out.println("aaaa".toUpperCase());
//下面会报空指针异常,因为persons[0]中的元素是null
// System.out.println(persons[0].toUpperCase());
String[][] persons2 = new String[2][];
// System.out.println(persons[0].charAt(0)); //空指针异常
String[] names = {"aa","bb"};
System.out.println(names[0].toUpperCase());
//其它常见的空指针异常
ArrayException exception = new ArrayException();
Person person = null;
// person = new Person();
System.out.println(exception);
System.out.println(person);
exception.personShow(person);
}
public void personShow(Person person){
person.show();
}
6、可变个数形参
格式:方法名(变量类型...变量名)
说明:
- 可变形参的个数可以是0个1个或者多个
- 如果一个方法中除了可变形参还有其它的参数,那么可变形参必须放在最后。
- 一个方法中只能有一个可变形参
- 可变参数方法的使用与方法参数部分使用数组是一致的
JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组的更多相关文章
- PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?
如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组' ...
- php获取一维,二维数组长度的方法(有实例)
在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我们来看几个实例吧.php如何获取数组的长度,使用php函数c ...
- C语言malloc函数为一维,二维,三维数组分配空间
c语言允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放,这些数据存储在堆区.可以根据需要,向系统申请 ...
- egret之一维,二维数组
一维数组转换成二维数组下标公式: 行=下标/二维数组列数 列=下标%二维数组列数+1 ] + ); ] + ); 二维数组转一维数组: 下标=(二维数当前行-1)*列数+二维数当前列-1: let i ...
- Java一维与二维数组的拷贝与排序
Java一维与二维数组的拷贝与排序 目录 Java一维与二维数组的拷贝与排序 Arrays.sort() 一维数组升序排序 二维数组按行升序排序 二维数组按列升序排序 Java中的数组 Java中数组 ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- 06-01 Java 二维数组格式、二维数组内存图解、二维数组操作
二维数组格式1 /* 二维数组:就是元素为一维数组的一个数组. 格式1: 数据类型[][] 数组名 = new 数据类型[m][n]; m:表示这个二维数组有多少个一维数组. n:表示每一个一维数组的 ...
- (转载)Android项目实战(二十八):Zxing二维码实现及优化
Android项目实战(二十八):Zxing二维码实现及优化 前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...
- C语言 一维数组叠加为二维数组样例
这里参看memcpy的用法,将一个一维整型数组不停的叠加为二维数组 使用宏定义来控制二维数组的行列 代码如下: #include <stdio.h> #include <stdlib ...
- PHP多个一维数组合并成二维数组的简易方法
当我们需要进行数组遍历数据的时候,需要将多个一维数组进行二维的转换,方法很简单.如下: <?php $a= array('张三','李四','王五'); $b= array ('23','24' ...
随机推荐
- 05_CSS入门和高级技巧(3)
上节课复习 !important不能影响就近原则,远的标签如果加上!important也干不过近的标签! !important不能影响继承权重是0,通过继承的标签加上!important也干不过直接选 ...
- Java语言简介、基础组成、封装、继承、多态、抽象类、内部类、接口
目录 Java简介 Java语言基础组成 面向对象 对象 封装 构造函数 this关键字 static(静态关键字) 主函数 静态什么时候用呢? 面向对象(数组工具对象建立) 设计模式 继承 成员变量 ...
- HDU 2001 (水)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2001 题目大意:两个点求距离 解题思路: 套基本公式 a = √(b2 + c2); 小数点后几位的表 ...
- Docker 镜像制作教程:针对不同语言的精简策略
本系列文章将分为三个部分: 第一部分着重介绍多阶段构建(multi-stage builds),因为这是镜像精简之路至关重要的一环.在这部分内容中,我会解释静态链接和动态链接的区别,它们对镜像带来的影 ...
- Python之sys.arg[]的用法解释
转载自:https://www.cnblogs.com/liangmingshen/p/8906148.html sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那 ...
- 「雕爷学编程」Arduino动手做(38)——joystick双轴摇杆模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解
如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 前面介绍过根据id,clas ...
- MySQL的列约束
1.列约束 (1)主键约束——PRIMARY KEY (2)非空约束——NOT NULL 声明了非空约束的列上,不允许使用NULL (3)唯一约束——UNIQUE 声明了唯一约束的列上不能插入重复的值 ...
- 解惑求助-关于NetCore2.2中间件响应的问题
背景介绍:基于netcore2.2开发api接口程序,自定义了一个异常捕获中间件,用于捕获未经处理的异常以及状态码404.500等访问(设计的出发点就是,出现了非200的响应,我这边全部会进行处理成2 ...
- 正则+re模块知识总结
目录 正则表达式 定义+特点 元字符 量词 贪婪匹配与非贪婪匹配 转义符 re模块 re.findall re.search re.match re.compile re.finditer re.sp ...