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 数组的基本概念的更多相关文章

  1. JAVA中数组的基本概念与用法

    JAVA中数组的基本概念与用法 1. 数组的定义与特点 数组的一种引用数据类型 数组中可以同时存放多个数据,但是数据的类型必须统一 数组的长度在开始时就需要确定,在程序运行期间是不可改变的 虽然可以使 ...

  2. java数组学习

    1. java数组的静态特性:          java是静态语言,java中数组的长度是固定的.还有,数组元素的类型也是在定义时指定了的. 2. java数组里的关键词:          数组变 ...

  3. Java 数组及数组常用算法

    1 数组也是一种类型 Java中要求所有的数组元素具有相同的数据类型.因此在一个数组中,数组元素的类型是唯一的,不能存储多种类型的数据. 一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此 ...

  4. 有关JVM处理Java数组方法的思考

    在Java中,获取数组的长度和String的长度是两种不同的方法,这引起了本文作者的一番思考.本文从JVM的角度,探讨了Java数组在JVM中是什么对象,有哪些成员,以及声明方法. 作者:jarfie ...

  5. Java数组初始

    首先要清楚数组变量与数组对象的概念.数组变量是一个引用变量,可以指向数组对象. int[] a = new int[]{7, 8, 9};        a是数组变量,指向有new创建的数组对象. 数 ...

  6. 七、java数组

    目录 一.一维数组 声明方式 数组对象的创建 元素为引用数据类型的数组 数组初始化 数组元素默认初始化 数组元素的引用 二.二维数组 概念 初始化 二维数组举例 三.数组的拷贝 四.练习 数组可以堪称 ...

  7. Java数组的基本讲解

    由于Java数组涵盖的内容比较多,这里从个人的角度对主要的内容进行相关的讲解. 如有不足,欢迎批评指正~ 1)Java数组是动态还是静态的啊?     Java语言是典型的静态语言,由此推断Java数 ...

  8. Java数组定义及初始化

    数组定义及初始化 数组这玩意是一种用于存放数据最常见数据结构. 数组的的概念及注意点 数组要求所有的数组元素具有相同的数据类型,且只能存在一种数据类型,要多专一有多专一. 数据类型既可以是基本类型也可 ...

  9. Java 数组最佳指南,快收藏让它吃灰

    两年前,我甚至写过一篇文章,吐槽数组在 Java 中挺鸡肋的,因为有 List 谁用数组啊,现在想想那时候的自己好幼稚,好可笑.因为我只看到了表面现象,实际上呢,List 的内部仍然是通过数组实现的, ...

随机推荐

  1. Codechef Observing the Tree

    Home » Practice(Hard) » Observing the Tree   https://www.codechef.com/problems/QUERY Observing the T ...

  2. bzoj 2375: 疯狂的涂色

    2375: 疯狂的涂色 Time Limit: 5 Sec  Memory Limit: 128 MB Description 小t非常喜爱画画,但是他还是一个初学者.他最近费尽千辛万苦才拜到已仙逝的 ...

  3. Python学习笔记(三十三)常用内置模块(2)collections_namedtuple_deque_defaultdict_OrderedDict_Counter

    摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431953239 ...

  4. jQuery Mobile基本UI组件

    基本页面构造 <!DOCTYPE html> <html> <head> <link rel="stylesheet" href=&quo ...

  5. Tomcat处理一个http请求的过程

    假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Con ...

  6. CURL 简介【转载】

    转自http://hancang2010.blog.163.com/blog/static/1824602612010711104018261/ 0) 头信息 curl命令查询服务器头信息 curl ...

  7. CSS浏览器兼容问题集-第二部分

    11.高度不适应 高度不适应是当内层对象的高度发生变化时外层高度不能自动进行调节,特别是当内层对象使用margin 或paddign 时.   例:  #box {background-color:# ...

  8. ubuntu永久修改主机名

    1.查看主机名 在Ubuntu系统中,快速查看主机名有多种方法:其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后:其二,在终端窗口中输入命令:hostname ...

  9. php-fpm性能优化

    PHP-fpm PHP-FPM是一个PHPFastCGI管理器,是只用于php的. php-fpm 已经在 Linux.MacOSX.Solaris 和 FreeBSD 上测试通过. 确信 libxm ...

  10. Java并发编程(二)

    1.Lock接口                                                        在Lock接口出现之前,Java程序是靠synchronized关键字实 ...