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 的内部仍然是通过数组实现的, ...
随机推荐
- 1.Spring揭秘--Ioc容器
1.Ioc即控制反转,假设一个类需要依赖另外一个类,在最初始的做法就是创建那个依赖类的对象,然后使用这个类提供的功能,如果创建这个依赖类的职责交给Ioc Service Provider去做,那么这就 ...
- NOIP模拟赛8
今天又爆零啦... T1 题目描述 #define goodcatdog gcd #define important i #define judge j 神说 每个梦想就是一轮月亮,高高地孤寂地挂在 ...
- Atcoder arc077 D - 11 组合
Link 题意:给出n个数,其中有一个数会出现两次,其余数只出现一次,问不同长度且不同的子串的数量.取模1e9+7 思路:组合求出所有情况,减去重复情况,注意用逆元即可 /** @Date : 201 ...
- CSS3之伪元素选择器和伪类选择器
伪类选择器,和一般的DOM中的元素样式不一样,它并不改变任何DOM内容.只是插入了一些修饰类的元素,这些元素对于用户来说是可见的,但是对于DOM来说不可见.伪类的效果可以通过添加一个实际的类来达到. ...
- Spring 5.0
Spring 5.0都有什么新功能? 1.最低要求支持JDK8+, J2EE 7+. 2.移除了一些包.类及方法. 3.核心功能加强:全面应用jdk8并兼容jdk9等. 4.SpringMVC:支持s ...
- 【leetcode 简单】第三十七题 相交链表
编写一个程序,找到两个单链表相交的起始节点. 例如,下面的两个链表: A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3 在节点 c1 开始相交. 注意: 如果两个 ...
- 22、WebDriver
什么是WebDriver?1.Webdriver(Selenium2)是一种用于Web应用程序的自动测试工具:2.它提供了一套友好的API:3.Webdriver完全就是一套类库,不依赖任何测试框架, ...
- python3爬虫.3.下载网页图片
目标,豆瓣读书, 下载页面书籍图片. import urllib.request import re #使用正则表达式 def getJpg(date): jpgList = re.findall(r ...
- python 第二章 对象与类型
可变对象和不可变对象 1,可变对象,list(列表),dict(字典),集合(set),字节数组. 2,不可变对象,数值类型,字符串,字节串,元组(具体形式 ()). 注意条件:可变和不可变指的是该对 ...
- 面向过程编程(OPP) 和面向对象编程(OOP)的关系
面向过程编程(OPP) 和面向对象编程(OOP)的关系 原文链接:http://blog.csdn.net/phphot/article/details/3985480 关于面向过程的编程(OPP)和 ...