java 数组的基本概念
1.数组的基本概念
数组指的是一组相关变量的集合。例如:如果说现在要定义100个整型变量,如果按照我们以前的思路,我们可能这样定义:
public class demo {
public static void main(String[] args) {
int a = 1, b = 2, c = 3, d = 4; ///... ... 一共写100个
}
}
以上的形式的确可以满足技术要求,但是有一个问题,这100个变量没有任何的逻辑控制,那么就会出现对象不方便管理的情况。那么在这样的情况下,就可以用数组来解决此类问题,数组本身数组引用数据类型,所以数组的定义语法如下:
- 声明并开辟数组:数据类型 数组名称 [ ] = new 数组类型[ 长度 ] ; // 数据类型 [ ] 数组名称 = new 数组类型[ 长度 ] ,[ ]的位置也可以这样
- 分步完成:
- 声明数组: 数据类型 数组名称 [ ] = nul ; //声明的时候才会使用 [ ] ,
- 开辟数组:数组名称 = new 数组类型 [ 长度 ] ;
当数组开辟空间之后,那么可以 数组名称[下标 || 索引] 的形式进行访问,但是索引数组的下标都是从0开始的(和python元组概念一样,也是不能越界,会抛出[ArrayIndexOutOfBoundsException]错误)
//以上 定义数组使用的是动态初始化的方式
范例:
public class demo_Array {
public static void main(String[] args) {
int data[] = new int[3]; //声明并开辟一个3个长度的数组
System.out.println(data[0]);
System.out.println(data[1]);
System.out.println(data[2]);
}
}
out:
0
0
0
//上面说明动态生成的数组初始化值为0
由于数组是一种顺序结构,并数组的长度都是固定的,那么可以使用循环的语句进行输出(和Python概念一样),而且java里面为了方便数组的输出有一个内置方法可以取得数组长度。
方法 : “ 数组名称 . length ” 如下
public class demo_Array {
public static void main(String[] args) {
int data[] = new int[3]; //声明并开辟一个3个长度的数组
System.out.println(data.length);
}
}
out:
3
赋值并循环输出:
1 public class demo_Array {
2 public static void main(String[] args) {
3 int data[] = new int[3]; //声明并开辟一个3个长度的数组
4 data[0] = 10; //赋值语句
5 data[1] = 20; //赋值语句
6 data[2] = 30; //赋值语句
7 for (int x =0 ; x< data.length;x++){
8 System.out.println(data[x]);
9 }
10 }
11 }
out:
10
20
30
虽然数组的操作很简单,当它也属于引用数据类型,牵涉到内存分配的问题,与对象保存的唯一区别在yu:对象中的堆保存的是属性,而数组中的堆保存的是一组信息;

分步完成的话:
public class demo_Array {
public static void main(String[] args) {
int data[] = null; //声明数组
data = new int[3]; //开辟数组堆空间
data[0] = 10;
data[1] = 20;
data[2] = 30;
for (int i =0 ; i< data.length;i++){
System.out.println(data[i]);
}
}
}
跟对象的概念基本一样
* 既然数组属于引用数据类型,那么数组也可以发生引用传递:
//引用传递的目标必须也是一个数组
public class demo_Array {
public static void main(String[] args) {
int data[] = new int[3]; //声明并开辟一个3个长度的数组
int temp [] = data; //引用传递的目标必须也是一个数组
data[0] = 10;
data[1] = 20;
data[2] = 30;
for (int i =0 ; i< data.length;i++){
System.out.println(data[i]);
}
}
}
以上数组的定义格式是属于动态初始化,操作特点是:先开辟数组空间,而后赋值。
那么也有静态初始化:
1. 数据类型 数组名称 [ ] = { 值,值,值...... } ; (不推荐)
2.数据类型 数组名称 [ ] = new 数据类型 [ ] { 值,值,值...... } ;
静态初始化范例:
public class demo_Array {
public static void main(String[] args) {
int data[] = new int[]{1,2,3,4,5};
for (int i =0 ; i< data.length;i++){
System.out.println(data[i]);
}
}
}
out:
1
2
3
4
5
*在实际工作中数组是会存在的,但它的内容大部分情况下都是通过传递的数据动态生成的,很少会出现这种先开辟数组再使用的情况
*java数组有一个最大的缺陷,长度是不能被改变的,就是不能+1-1长度,所以很少会直接生成使用,而是通过传递动态生成
2.二位数组
在之前的数值里面只有一个 [ ] ,也称为一维数组,而如果要描述更多的数据,可以使用二位数组, 后面有两个[ ] [ ] 。
一维数组:
| 索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 数据 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 |
在一维数组里面要找一个数组,只要确定一个索引就可以了 System.out.println(data[0]); ;
二位数据:
| 索引 | 列:0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 行:0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 |
| 1 | 564 | 87 | 3678 | 453 | 831 | 54 | 12 | 87 | 23 |
| 2 | 75 | 825 | 8787 | 687 | 87 | 35 | 54 | 87 | 57 |
如果现在要确定蓝色这个数据,需要行列定位,例如:行1,列5 = [ 1 ][ 5 ] ;
而定义语法有两类:
- 动态初始化: 数据类型 数组名称 [ ][ ] = new 数据类型 [行的个数][列的个数] ;
- 静态初始化:数据类型 数组名称 [ ][ ] = new 数据类型 [ ][ ] { { 值,值,值... ... } };
所谓的二维数组实际上就是将多个一维数组变成了一个大的数组,并且为每一个一维数组设置了一个行号 ;
静态初始化和输出:
public class demo_Array {
public static void main(String[] args) {
int data [][] = new int[][]{
{1,2,3},
{4,5,6},
{7,8,9}
} ;
//外层循环是控制数组的数据行内容
for (int x = 0 ; x < data.length ; x++){
//内层循环是控制数组的数据列内容
for (int y = 0 ; y < data[x].length ; y++){
System.out.print(data[x][y] + "\t");
}
System.out.println();
}
}
}
out:
1 2 3
4 5 6
7 8 9
* 实际开发中二位数组很少出现
3.数组与方法参数的传递 **
数组也可以传递,但是如果传递的是数组,请观察内存分配。
public class demo {
public static void main(String[] args) {
int data[] = new int[]{1,2,3};
change(data); // data = int temp []
for (int x=0 ; x< data.length; x++) {
System.out.println(data[x]);
}
}
//此方法定义在主类中,并由主方法直接调用
public static void change(int temp[]){
for (int x = 0 ; x < temp.length ; x++){
temp[x] = temp[x] * 2;
// System.out.println(temp[x]);
}
}
}
观察内存:

另外一种:
public class 数组传递 {
public static void main(String[] args) {
int data[] = new int[]{1,2,3};
int temp[] = data; //数组传递
for (int x = 0 ; x < temp.length ; x++){
temp[x] = temp[x] * 2;
}
for (int x=0 ; x< data.length; x++) {
System.out.println(data[x]);
}
}
}
*在进行数组的引用传递中,方法对数组的修改一定会影响原始数据。
java 数组的基本概念的更多相关文章
- JAVA中数组的基本概念与用法
JAVA中数组的基本概念与用法 1. 数组的定义与特点 数组的一种引用数据类型 数组中可以同时存放多个数据,但是数据的类型必须统一 数组的长度在开始时就需要确定,在程序运行期间是不可改变的 虽然可以使 ...
- java数组学习
1. java数组的静态特性: java是静态语言,java中数组的长度是固定的.还有,数组元素的类型也是在定义时指定了的. 2. java数组里的关键词: 数组变 ...
- Java 数组及数组常用算法
1 数组也是一种类型 Java中要求所有的数组元素具有相同的数据类型.因此在一个数组中,数组元素的类型是唯一的,不能存储多种类型的数据. 一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此 ...
- 有关JVM处理Java数组方法的思考
在Java中,获取数组的长度和String的长度是两种不同的方法,这引起了本文作者的一番思考.本文从JVM的角度,探讨了Java数组在JVM中是什么对象,有哪些成员,以及声明方法. 作者:jarfie ...
- Java数组初始
首先要清楚数组变量与数组对象的概念.数组变量是一个引用变量,可以指向数组对象. int[] a = new int[]{7, 8, 9}; a是数组变量,指向有new创建的数组对象. 数 ...
- 七、java数组
目录 一.一维数组 声明方式 数组对象的创建 元素为引用数据类型的数组 数组初始化 数组元素默认初始化 数组元素的引用 二.二维数组 概念 初始化 二维数组举例 三.数组的拷贝 四.练习 数组可以堪称 ...
- Java数组的基本讲解
由于Java数组涵盖的内容比较多,这里从个人的角度对主要的内容进行相关的讲解. 如有不足,欢迎批评指正~ 1)Java数组是动态还是静态的啊? Java语言是典型的静态语言,由此推断Java数 ...
- Java数组定义及初始化
数组定义及初始化 数组这玩意是一种用于存放数据最常见数据结构. 数组的的概念及注意点 数组要求所有的数组元素具有相同的数据类型,且只能存在一种数据类型,要多专一有多专一. 数据类型既可以是基本类型也可 ...
- Java 数组最佳指南,快收藏让它吃灰
两年前,我甚至写过一篇文章,吐槽数组在 Java 中挺鸡肋的,因为有 List 谁用数组啊,现在想想那时候的自己好幼稚,好可笑.因为我只看到了表面现象,实际上呢,List 的内部仍然是通过数组实现的, ...
随机推荐
- HDU 1695 容斥
又是求gcd=k的题,稍微有点不同的是,(i,j)有偏序关系,直接分块好像会出现问题,还好数据规模很小,直接暴力求就行了. /** @Date : 2017-09-15 18:21:35 * @Fil ...
- 桥接模式_NAT模式_仅主机模式_模型图.ziw
2017年1月12日, 星期四 桥接模式_NAT模式_仅主机模式_模型图 null
- asp.net 遍历文件夹下全部子文件夹并绑定到gridview上
遍历文件夹下所有子文件夹,并且遍历配置文件某一节点中所有key,value并且绑定到GridView上 Helper app_Helper = new Helper(); DataSet ds = n ...
- 【BZOJ】2565: 最长双回文串
[题意]给定小写字母字符串s,求最长的 [ 可以分成左右两个回文串的 ] 子串,n<=10^5. [算法]回文树 [题解]对于每个字符x,处理出以x结尾的最长回文串,以x开头的最长回文串,然后枚 ...
- 小程序Openid 获取,服务器 encryptedData 解密 遇到的坑
获取客户 openId 和 unionId 需要以下步骤(都为必须步骤) 1.从验证从客户端传上来code, 获取sessionKey (需要配合小程序appid ,secret 发送到微信服务器) ...
- 【leetcode 简单】第三十九题 Excel表列名称
给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> ...
- https://segmentfault.com/bookmark/1230000008276077
https://segmentfault.com/bookmark/1230000008276077
- Mac 10.9x下安装配置phonegap3.0开发环境 (涉及android sdk配置)
最近突然想弄一下phonegap,之前一直是听说,没亲自配置开发过.结果配置过程非常艰难啊.特别是android平台的配置,那叫一个麻烦,网上搜了半天都没找到非常好的资料.文章也都是抄来抄去,最烦的就 ...
- arch点击硬盘无法挂载
出现问题如下 在使用xfce4桌面的时候在点击硬盘图标时可以挂载虽然要求你输入root密码 但是在使用openbox的时候点击硬盘图标却出现如下提示,权限的问题 Not authorized to p ...
- discuz各个目录与文件的作用说明
discuz下面有很多文件夹以及文件,你们都知道他们是做什么的么?肯定不知道了吧.但是我们有经常遇到这些文件,譬如在后台文件校验操作都遇到某些文件被修改,这时候也需要知道这些文件是有什么作用的.今天就 ...