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. python---爬虫相关性能(各个异步模块的使用,和自定义异步IO模块)

    一:线程池,进程池等相关文章了解 python---基础知识回顾(十)进程和线程(py2中自定义线程池和py3中的线程池使用) python---基础知识回顾(十)进程和线程(协程gevent:线程在 ...

  2. [LeetCode] 26. Remove Duplicates from Sorted Array ☆

    Given a sorted array, remove the duplicates in place such that each element appear only once and ret ...

  3. zoj 3229 Shoot the Bullet(有源汇上下界最大流)

    Shoot the Bullethttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3442 Time Limit: 2 Second ...

  4. 在asp.net中使用加密数据库联接字符串

    在我们发布网站时,加密web.config,这样可以有效保证数据库用户和密码安全,其步骤如下: 1.添加密钥 执行:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50 ...

  5. 【BZOJ】1707: [Usaco2007 Nov]tanning分配防晒霜

    [算法]贪心扫描线(+堆) [题意]给定n头牛有区间[a,b],m个防晒霜值为ai,每个可以使用bi次,每次可以使包含它的区间涂到防晒霜,问最多被涂牛数. [题解] 参考:[bzoj1707]: [U ...

  6. python并发编程之Queue线程、进程、协程通信(五)

    单线程.多线程之间.进程之间.协程之间很多时候需要协同完成工作,这个时候它们需要进行通讯.或者说为了解耦,普遍采用Queue,生产消费模式. 系列文章 python并发编程之threading线程(一 ...

  7. Android上HDMI介绍(基于高通平台)

    本文重点针对HDMI在android上的应用,而比较相关的就是overlay机制.overlay在这里只是简单的介绍,后续会有文章再专门详述. 我没记错的话,高通从7X30开始,平台就可以支持HDMI ...

  8. [ python ] 集合的使用

    集合的使用 可变数据类型,他里面的元素必须是不可变的数据类型,无序,不重复. 集合的增删查 集合是没有改这种说法的: (1)集合的元素无序的: (2)集合的元素为不可变类型  增加 add    为集 ...

  9. jquery如何获取第一个或最后一个子元素

      jquery如何获取第一个或最后一个子元素? 通过children方法,children("input:first-child") $(this).children(" ...

  10. 将table导出为excel格式文件

    html: <table cellpadding="0" cellspacing="0" class="data_table" id= ...