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

  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属性,表示数组的长度. 该属性只能读取,但是不能修改。

六:二维数组

   存放一维数组的数组
int[][] a = new int[2][3];
a[0].length;
a.length;

七:System.arraycopy()

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

int[] a = new int[5];
int[] b = new int[5];
a=b与System.arraycopy(a,0,b,0,5)有什么区别?
/*
* @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);

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

两个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)一个方法中只能定义一个可变长参数,并且要定义最后一个参数。

欢迎访问我的腾讯云+社区:传送门

java学习笔记(基础篇)—java数组的更多相关文章

  1. java学习笔记(基础篇)--java关键字与数据类型

    java关键字与数据类型 Java语言的关键字是程序代码中的特殊字符.包括: . 类和接口的声明--class, extends, implements, interface . 包引入和包声明--i ...

  2. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

  3. Java学习笔记——基础篇

    Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!! 学习笔记: *包.权限控制 1.包(package) ...

  4. java学习笔记(基础篇)—数组模拟实现栈

    栈的概念 先进后出策略(LIFO) 是一种基本数据结构 栈的分类有两种:1.静态栈(数组实现) 2.动态栈(链表实现) 栈的模型图如下: 需求分析 在编写代码之前,我习惯先对要实现的程序进行需求分析, ...

  5. java学习笔记(基础篇)—面向对象编程之封装、继承、多态

    一. OOP中的基本概念 Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-Oriented Programming, OOP), 它允许设计者将面向对象设计实现为一 ...

  6. java学习笔记(基础篇)—变量与表达式

    一:局部变量和实例变量 定义变量是指设定变量的数据类型和变量的名字,Java语言要求变量遵循先定义,再初始化,然后使用的规则. 作用域:指它的存在范围,只有在这个范围内,程序代码才能访问它. 变量的生 ...

  7. java学习笔记(基础篇)—抽象与接口的区别

    抽象与接口的区别 一.抽象(abstract) 1. 抽象方法 1) 作用:定义规范 2) 抽象方法用来描述具有什么功能,但不提供实现. 3) 如果类中一个方法没有实现就要定义一个抽象方法. 2. 抽 ...

  8. java学习笔记(中级篇)—java实现高质量图片压缩

    使用java几十行代码实现一个高质量图片压缩程序,再也不用去自己找网络的压缩程序啦!而且很多网上的工具还有水印或者其他的限制,自己动手写一个简单的应用,是再合适不过了. 一.实现原理 1.声明两个字符 ...

  9. Java学习 (四)基础篇 Java基础语法

    注释&标识符&关键字 注释 注释并不会被执行,其主要目的用于解释当前代码 书写注释是一个非常好的习惯,大厂要求之一 public class hello { public static ...

随机推荐

  1. 零元学Expression Blend 4 - Chapter 14 用实例了解布局容器系列-「Pathlistbox」II

    原文:零元学Expression Blend 4 - Chapter 14 用实例了解布局容器系列-「Pathlistbox」II 本章将延续上一章的范例,步骤解析. 本章将延续上一章的范例,步骤解析 ...

  2. 微软Skype实时口译增加中文

    直击现场 在机器翻译技术上,微软的 Skype 业务也算是行业内名列前茅.日前其实时口语翻译技术再次跃升一个台阶,新增了对中文(普通话)的翻译支持. 据美国科技新闻网站 TheVerge 报道,此前, ...

  3. 为什么你有10年经验,但成不了专家?(重复性刻意训练+反馈修正,练习的精髓是要持续地做自己做不好的,太精彩了)真正的高手都有很强的自学能力,老师和教练的最重要作用是提供即时的反馈(莫非我从小到大学习不好的原因在这里?没有单独刻意训练?) good

    也许简单看书就是没有刻意训练.更没有反馈,所以没有效果 我倒是想起自己,研究VCL源码的时候,都是自己给自己提问,然后苦思冥想.自己解决问题,然后Windows编程水平果然上了一个台阶.对什么叫做“框 ...

  4. QT多个UI文件加入一个项目

    这样可在多个UI界面上进行分部开发.避免都在一个UI下太凌乱…… 在网上找了一些资料,很少有介绍这方面的,以及类似这样项目的源码. 看 一些基本控件的使用时,想到了一种方法:使用gridLayout控 ...

  5. [每天记录一个Bug]Cell中由于block加载网络请求产生的复用

    Bug 出现场景:   cell中使用加载图片的网络请求出现复用,截图如下:         复用原因:   Cell Model中只有一个用户的uid,所有用户相关信息:例如头像\名称\信息等是通过 ...

  6. 当程序调用dll时获取dll路径,DLL中获取自身的句柄

    当程序调用dll时,获取dll路径的方法: HMODULE hMod = GetModuleHandle(_T("axload.dll")); if (hMod != NULL) ...

  7. Ural_1169_Pairs

    此题略坑... 思路:把N个点分成m若干个联通子图,然后用m-1个桥把这m个联通子图连接起来即可. 若每个联通子图内部都是完全图也符合题意,但答案却是Wrong Answer,只有把每个联通子图内部当 ...

  8. js中prototype与__proto__区别

    proto(隐式原型)与prototype(显式原型) 显式原型 explicit prototype property:每一个函数在创建之后都会拥有一个名为prototype的属性,这个属性指向函数 ...

  9. javaweb各种框架组合案例(二):maven+spring+springMVC+mybatis

    1.mybatis是比较新的半自动orm框架,效率也比较高,优点是sql语句的定制,管理与维护,包括优化,缺点是对开发人员的sql功底要求较高,如果比较复杂的查询,表与表之间的关系映射到对象与对象之间 ...

  10. 一线Python运维开发带你秒懂Flask框架

    相信曾经纠结过这个问题:怎样才能彻底掌握flask? Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . ...