前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java学习笔记(基础篇)—java数组

java学习笔记(基础篇)—java数组

作者头像
chlinlearn
发布2019-07-24 10:56:16
6040
发布2019-07-24 10:56:16
举报
文章被收录于专栏:java老实人java老实人

一:什么是数组,什么时候使用数组?

  1. 数组是用来保存一组数据类型相同的元素的有序集合,数组中的每个数据称为元素。有序集合可以按照顺序或者下标取数组中的元素。
  2. 在Java中,数组也是Java对象。数组中的元素可以是任意类型(包括基本类型和引用类),但同一个数组里只能存放类型相同的元素。

二:什么时候用数组?

  1. 保存一堆数据类型相同的数据的时候。
  2. 数据要求有顺序。

三:数组和链表的区别

  1. 在内存开辟难易程度上? 数组内存分配必须是一块连续的内存空间。 链表内存分配不一定是连续的内存空间。
  2. 在项目中如何选择? 项目重点在数据的增删改,选择链表。不需要数据的大量搬移 项目重点在数据的查询,选择数组,检索效率非常高。

四:创建数组大致包括如下步骤:

  1. 声明一个数组类型的引用变量,简称为数组变量;
  2. 用new语句构造数组的实例。new语句为数组分配内存,并且为数组中的每个元素赋予默认值;
  3. 初始化,即为数组的每个元素设置合适的初始值。 1. a)数组变量的声明; 1) 一个存放同一类型数据的集合 a. 即可以是基本类型,也可以是对象类型; b. 数组中的每个数据为元素; 2) 数组是一个对象,成员是数组长度和数组中的元素; 3) 申明了一个数组变量并不是创建了一个对象; 4) 申明数组的方式; int[] IArray 或者 int IArray[] 基本数据类型数组,数组中存放的是基本数据类型。 Teacher[] tArray 或者 Teacher tArray[]类数组, 数组中存放的是Teacher类创建的若干个的对象。 注意:1) 声明数组变量的时侯,不能指定数组的长度,以下声明方式是非法的。 int x[1]; int[2] x; b)初始化数组 初始化:自变量创建后首次赋值的过程; 创建数组对象;数组对象和其他Java对象一样,也用new语句创建; int[] iArray = new int[2]; new语句执行以下步骤: a. 在堆区中为数组分配内存空间,以上代码创建了一个包含2个元素的int数组; 每个元素都是int类型,占4个字节,因此整个数组对象在内存中占用8个字节。 b. 为数组中的每个元素赋予其数据类型的默认值。 byte/short/int/long 0 float 0.0f double 0.0d String null char '\u0000' boolean false c. 返回数组对象的引用 c)初始化数组对象; 数组中的每个元素都有一个索引,或者称为下标。 数组中的第一个元素的索引为0,第二个元素的索引为1, 依次类推。 通过索引可以访问数组中的元素或者给数组中元素内容赋值。 1) 声明、创建、初始化分开: int[] iArray; iArray = new int[2]; iArray[0] = 0; iArray[1] = 1; 2) 声明、创建的同时并初始化数组; int[] iArray = {0, 1}; Student sArray[] = new Student[] { new Student(“George”, “Male”, 20), new Student()}; Student[] stArray = { new Student(), new Student()} ; 注意:a. 非法的数组初始化方式: int[] x = new int[5]{5,4,3,2,1};//编译出错,不能在[]中指定数组的长度; int[] x; x = {5,4,3,2,1}; //{5,4,3,2,1}必须在声明数组变量的语句中使用,不能单独使用

五. 数组的边界:

  1. 一个数组的下标从0开始,数组通过数组的对象引用变量的下标访问数组。数组中第一个元素的索引为0, 第二元素的索引为1,依次类推。如果一个数组长度是5,要访问最后一个数组元素可以通过下标4来访问,如果通过下标5访问,超出了数组的边界,在运行时会抛出 ArrayIndexOutOfBoundsException。
  2. 通过调用数组的length方法可以获得一个数组的元素个数(数组长度)。 所有Java数组都有一个length属性,表示数组的长度. 该属性只能读取,但是不能修改。

六:二维数组

代码语言:javascript
复制
   存放一维数组的数组
   int[][] a = new int[2][3];
   a[0].length;
   a.length;

七:System.arraycopy()

​ 数组的长度一旦定义了,就无法修改。所以需要arraycopy()来重新分配一个新的 数组(扩容),然后将其内容拷贝进去。

代码语言:javascript
复制
int[] a = new int[5];
int[] b = new int[5];
a=b与System.arraycopy(a,0,b,0,5)有什么区别?
代码语言:javascript
复制
/*
 * @param      src      the source array.
 * @param      srcPos   starting position in the source array.
 * @param      dest     the destination array.
 * @param      destPos  starting position in the destination data.
 * @param      length   the number of array elements to be copied.
*/
public static native void arraycopy(Object src, int srcPos,Object dest, int destPos,int length);

八:可变长参数 ... 参数的个数可变

代码语言:javascript
复制
两个int相加?
public int add(int a,int b){}
三个int相加?
public int add(int a,int b,int c){}
四个int相加?
public int add(int a,int b,int c,int d){}
五个int相加?
public int add(int a,int b,int c,int d,int e){}
..........
上面的方案代码非常冗余。类似的代码重复写。
jdk1.5之前的解决方案:通过数组解决的
 public int add(int[] a){
 }

add(new int[]{5,8,9});
add(new int[]{5,8});

缺点:每次都要创建新的数组,
    创建数组需要在堆区开辟连续的内存空间。
    参数调用之后该变量就没用了,这样会
    浪费内存空间。
jdk1.5之后的解决方案:通过...解决的
 public int add(int... a){
 }
调用: add(1,4);
         add(1,4,6);
         add(7,6,8,89,76);

注意: 1)可变长参数的使用和数组的使用是一样。 2)一个方法中只能定义一个可变长参数,并且要定义最后一个参数。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:什么是数组,什么时候使用数组?
  • 二:什么时候用数组?
  • 三:数组和链表的区别
  • 四:创建数组大致包括如下步骤:
  • 五. 数组的边界:
  • 六:二维数组
  • 七:System.arraycopy()
  • 八:可变长参数 ... 参数的个数可变
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档