Java编程基础——数组和二维数组

摘要:本文主要对数组和二维数组进行简要介绍。

数组

定义

数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器。

数组是一种引用类型,用于保存一组相同类型的数据。

数组定义的类型可以为任意类型,意思是我们可以定义int类型的数组,也可以定义String类型的数组,或其他任何类型的数组。

数组实际在内存的存储和基本类型不同,实际上是在堆中申请空间保存一组数,栈中只是有一个地址的引用。

声明数组

语法:

 类型[] 数组名;
类型 数组名[];

举例:

 int[] sum;
int color[];

说明:

此时只是声明了一个数组变量,并没有在内存中开辟空间。

开辟空间

语法:

 数组名 = new 类型[长度];

举例:

 sum = new int[5];

说明:

数组开辟空间时,必须要设置开辟的空间长度。

这时会根据类型对数组里的数据设置默认值。

数组赋值

语法:

 数组名[下标] = 值;

举例:

 sum[0] = 10;

说明:

在对数组进行赋值时,注意下标不要超过数组的长度范围,否则会产生错误。

使用数组

语法:

 数组名[下标]

举例:

 System.out.println(sum[0]);

说明:

同样需要注意下标不要超过数组的长度范围。

其他赋值方式

除了上面通过下标赋值,还可以在声明时开辟空间并赋值,或者在开辟空间时赋值。

语法:

 数组名 = new 类型[]{值, 值};
类型[] 数组名 = {值, 值};

举例:

 int[] sum = {1, 2};
sum = new int[]{1, 2, 3};

说明:

这两种方式都需要在确定数组大小和值的内容的时候使用。

在开辟空间时赋值,不需要在中括号里面填写数组长度。

注意

数组不赋值也有默认值。

数组中每个元素的赋值和访问都是通过“数组名[下标]”实现的,不能直接使用数组名。

“数组名.length”代表的是数组的长度,经常用在循环中,提高代码的维护性。

数组的下标从 0  ~  数组名.length - 1 ,如果不是这个范围,会导致一个数组下标越界的异常:ArrayIndexOutOfBoundsException。

数组没有开辟空间,直接使用,会导致一个空指针异常:NullPointerException。

进阶使用

数组的复制

◆ 引用类型的赋值:复制的是一个地址号,二者共同引用一个地址,其中一个对数组做了更改,都会影响另一个。

◆ 基本类型的赋值:复制的是数值内容,实际上是一个备份,其中一个对它更改,不会影响另一个。

复制引用地址:

复制的是一个地址号,二者共同引用一个地址,其中一个对数组做了更改,都会影响另一个。

 int[] a1 = {1, 2, 3};
int[] a2;
a2 = a1;
System.out.println(a2[0]);
a1[0] = 100;
System.out.println(a2[0]);

结果:

 1
100

复制数组数据:

 int[] a1={1, 7, 8};
int[] a2 = new int[a1.length];
for (int i = 0; i < a1.length; i++) {
a2[i] = a1[i];
}
System.out.println(a2[0]);
a2[1]=100;
System.out.println(a2[0]);

结果:

 1
1

数组的排序

 int[] nums = {1, 9, 3, 5, 2, 8, 4};
for(int i = 0; i < nums.length - 1; i++) {// 控制轮数
for(int j = 0; j < nums.length - 1 - i; j++) {
if (nums[j] < nums[j + 1]) {// 交换
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}

数组的倒置

 int[] nums = {1, 9, 3, 5, 2, 8, 4};
for(int i = 0; i < nums.length / 2; i++) {
int temp = nums[i];
nums[i] = nums[nums.length - 1 - i];
nums[nums.length - 1 - i] = temp;
}

工具类

排序: Arrays.sort(nums);

填充: Arrays.fill(nums, 1);

转成字符串以便打印: Arrays.toString(nums);

比较: Arrays.equals(a1, a2);

二维数组

定义

二维数组可以看做是一个数组,里面存放的元素是一维数组。

声明数组

 int[][] nums;
int nums[][];
int[] nums[];

开辟空间

 nums = new int[3][];// 行固定,列不固定。
nums = new int[3][2];// 行固定,列固定。

数组赋值

动态初始化,使用时赋值,需要指明行和列:

 nums[0][1] = 1;

静态初始化,声明时赋值,不必也不能指明行和列,否则会提示错误:

 int[][] nums = new int[][]{{1}, {9, 3, 5, 2}, {7, 6}};
int[][] nums = {{1}, {9, 3, 5, 2}, {7, 6}};

注意

如果在动态初始化时明确了二维数组的行数和列数,那么一维数组的长度就是固定的列数。

如果在动态初始化时仅仅明确了行数,或者通过静态初始化赋值,那么一维数组可以有不同的长度。

数组排序

冒泡排序

思路

属于交换排序。

从第一个元素开始,比较两个相邻的元素,如果两个元素位置不正确,则进行交换,否则继续比较下面相邻的两个元素。

代码

 public void test() {
int[] arr = new int[]{, , , , };
int len = arr.length;
for (int i = ; i < len - ; i++) {
for (int j = ; j < len - i - ; j++) {
if (arr[j] > arr[j + ]) {
int temp = arr[j];
arr[j] = arr[j + ];
arr[j + ] = temp;
}
}
}
for (int i = ; i < arr.length; i++) {
System.out.println(arr[i]);
}
}

快速排序

思路

属于交换排序。

任取序列的某个元素作为界点,将序列分为两个子序列,左子序列的元素小于界点,右子序列的元素大于界点,然后递归每个子序列,直到每个子序列只有一个元素。

代码

 public void test() {
int[] arr = new int[]{, , , , , , };
sort(, arr.length - , arr);
for (int i = ; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public void sort(int left, int right, int[] arr){
int l = left;
int r = right;
int pivot = arr[(left + right)/];//找中间值
int temp = ;
while(l < r){
while(arr[l] < pivot) l++;
while(arr[r] > pivot) r--;
if(l >= r) break;
temp = arr[l];
arr[l] = arr[r];
arr[r] = temp;
if(arr[l] == pivot) --r;
if(arr[r] == pivot) ++l;
}
if(l == r){
l++;
r--;
}
if(left < r) sort(left, r, arr);
if(right > l) sort(l, right, arr);
}

直接选择排序

思路

属于选择排序。

每次都选取最小值放在起始位上,一共通过n-1次。

代码

 public void test() {
int[] arr = new int[]{, , , , , , };
for (int i = ; i < arr.length - ; i++) {
int index = i;
for (int j = i + ; j < arr.length; j++) {
if (arr[index] > arr[j]) {
index = j;
}
}
int temp = arr[i];
arr[i] = arr[index];
arr[index] = temp;
}
for (int i = ; i < arr.length; i++) {
System.out.println(arr[i]);
}
}

Java编程基础——数组和二维数组的更多相关文章

  1. java基础知识点补充---二维数组

    #java基础知识点补充---二维数组 首先定义一个二维数组 int[][] ns={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16} }; 实现遍 ...

  2. 062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用

    062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用 本文知识点:二维数组应用 二维数组的声明和创建 ? 出现空指针异常 数组的名字指向数组的第 ...

  3. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

  4. Java知识系统回顾整理01基础06数组06二维数组

    一.一维数组和二维数组 这是一个一维数组, 里面的每一个元素,都是一个基本类型int int a[] =new int[]{1,2,3,4,5}; 这是一个二维数组,里面的每一个元素,都是一个一维数组 ...

  5. java - day005 - 数组工具类, 数组复制,二维数组,变量,方法, 面向对象

    1. java.util.Arrays  数组工具类    Arrays.toString (数组) 数组值链接字符串 Arrays.sort(数组) 基本类型: 优化的快速排序 引用类型: 优化的合 ...

  6. Java数组之二维数组

    Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...

  7. JAVA描述算法和数据结构(01):稀疏数组和二维数组转换

    本文源码:GitHub·点这里 || GitEE·点这里 一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反, ...

  8. 一维数组、二维数组——Java

    一. 一维数组 1.  数组是相同类型数据的有序集合 相同类型的若干个数据,按照一定先后次序排列组合而成 每个数组元素可以通过一个下标来访问它们 其中,每一个数据称作一个数组元素 2. 数组特点: 其 ...

  9. android JNI 一维数组、二维数组的访问与使用

    在JNI中访问JAVA类中的整型.浮点型.字符型的数据比较简单,举一个简单的例子,如下: //得到类名 jclass cls = (*env)->GetObjectClass(env, obj) ...

随机推荐

  1. 多线程学习三:Thread API,ThreadLocal,synchronized,volatile和Condition

    一.Thread API: setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) 首先要了解什么是Thread. ...

  2. node设置跨域白名单

    // 判断origin是否在域名白名单列表中 function isOriginAllowed(origin, allowedOrigin) { if (_.isArray(allowedOrigin ...

  3. python字符减运算

    在C语言等高级语言中,字符之间的减运算都是支持的,但是python不然,在python中直接进行字符减运算是不被允许的. >>> print('c'-'a') Traceback ( ...

  4. GIL全局解释器锁、死锁、递归锁、线程队列

    目录 GIL全局解释锁 多线程的作用 测试计算密集型 IO密集型 死锁现象 递归锁 信号量(了解) 线程队列 GIL全局解释锁 GIL本质上是一个互斥锁. GIL是为了阻止同一个进程内多个进程同时执行 ...

  5. 使用 shopfiy 模板语言,创建产品模板以搭配购物车实现一键购买

    shopfiy 的 product 在添加产品时,如果要将产品详情页面与购物车关联,就是在详情页里面直接下单,而不是从详情页通过点击购买按钮,跳到 shopfy stroe ,再从这个位置再跳转到下单 ...

  6. appium---元素定位方法

    在我们做自动化测试的过程中,最基本的就是要会元素定位,也是自动化中的灵魂所在,如果一个自动化测试工程师说不会定位元素定位,那么肯定也不会做自动化了. 如何查看元素 小伙伴们都知道如果是web端可以通过 ...

  7. python 连接数据库,查询结果写入数据到excel

    使用Python链接数据库查询数据,并将查询结果写入到Excel中,实现方法上主要有两步,第一,查数据,第二,写Excel. 一.导入需要的包 import time import xlwt from ...

  8. 2019.6.13_SQL语句中----删除表数据drop、truncate和delete的用法

    一.SQL中的语法 1.drop table 表名称                         eg: drop table  dbo.Sys_Test   2.truncate table 表 ...

  9. 移动端(手机端)页面自适应解决方案1(rem布局)---750设计稿

    设计稿尺寸为750 * 1340.结合网易.淘宝移动端首页html元素上的动态font-size属性.设计稿尺寸.前端与设计之间协作流程一般分为下面两种: 网易做法: 页面开头处引入下面这段代码,用于 ...

  10. Python tempfile (临时文件)

    Python tempfile 大量临时数据放在内存中会占用大量资源,可以使用临时文件来进行储存 临时文件不用命名,且使用后会被自动删除 TemporaryFile 使用 TemporaryFile ...