技术文章-数组与队列

在Java编程中,常常会遇到需要存储和处理大量同类信息的时候,这时候就要运用数组或者队列的数据存储结构来方便操作。

 

1.数组

 

定义:数组是属于数据结构中一种线性的数据结构,因为其对象在内存中的存储方式是一个连续的存储空间。

 

数组在使用时的书写格式:(以一维数组为)

定义和实例化对象同步进行:

已知存储数据的类型和长度时:数据类型 [] 数组名 = new 数据类型[长度];

已经知道具体的每一项数据时:数据类型 [] 数组名 = {数据,...};

已经知道具体的每一项数据同时规定数据类型时:数据类型 [] 数组名 = new 数据类型[]{数据,...};

 

先定义再实例化对象:

定义:数据类型 [] 数组名;

        数组名 = new 数据类型[长度];

        数组名 = new 数据类型[]{数据,...};

 

特殊的二维数组书写方式:

数据类型 [][] 数组名 = new 数据类型[行][列];

数据类型 [][] 数组名 = {{数据,...},...};

 

数组是一个Java中已经定义好的类,但是这个类只有一个length属性,没有方法。

Length这个属性是用来定义数组长度的。所以在定义数组时,一定要事先定义好其长度。

 

在获取或者设置一维数组具体的某个位置的数据时,就要使用该书写格式:数组名[下标]

另外,如果一个数组没有特殊的规定,数组的下标是从0开始的。所以其编号是从0到length-1但是一个数组中能存储元素的最大量是由length决定:数组名.length。

 

在获取或设置二维数组中某一个位置的数据:数组名[行下标][列下标]

获取二维数组的行数:数组名.length

获取二维数组的列数:数组名[行下标].length

获取二维数组能存储多少个元素:

数组名.length*数组名[行下标].length

数组名[行下标].length+… 而不是简单的行数*列数,因为定义二维数组时,每一列的长度可以不同。

 

同时注意:在数组的操作中,除了0是直接给的数字之外,其他的都通过length来获取。同时数组下标只会从0开始。

 

数组的优点和缺点?

优点:

存取数据是所有数据结构中速度最快的一种,你在获取或设置数据时,

可以直接通过下标定位。

 

缺点:

如果你要存储的数据不确定时,数组在创建时需要给予的长度就是缺点。

        1.创建数组小了,存储不下数据

        2.创建数组大了,浪费内存空间

如果在项目中特定情况下只能存储一种数据类型;在项目的两一个位置

需要存储N种数据类型;这样数组在创建时需要指定固定的类型就会是缺点。

2.数组队列

从数组中可以知道,要使用一个数组,就必须知道其长度,同时数组中所有数据的类型都是统一的,如果需要存储不同数据类型的数据,并且不知道数据量的大小时,就可以使用数组队列。

 

数组队列的实现原理:借助于数组名中存储的是数组对象在内存中的首地址。也就是说如果加入或者删除了数据,就新建一个新的数组,先修改改动的内容,再将没改动的内容复制过来。

 

Java中包含了自己定义好的ArrayList类,但是如果需要自己定义一个类时可能需要用到的接口和类:

 

interface MyArrayList.java   父接口,定义数组中所需要实现的方法。

class MyArrayListImpl.java     子类,实现MyArrayList接口中所有的抽象方法。

 

Object类是所有类的父类,所以利用Object就可以实现在ArrayList中存储任意类型的数据,但是如果使用者又想要规定一个ArrayList的数据类型时,就需要使用泛型<E>。

泛型是Java中的一种特殊符号,不能把它当做任何一个种数据类型。

但是它可以泛指Java所有的数据类型(基本数据类型,引用类型)。

例如:

public interface MyArrayList<E>{

}

<E>就代表的是泛型,E的类型决定了该ArrayList的数据类型

Java中的泛型有E(元素)、K(键)、V(值)。 K、V在实现五子棋的hash表中有过运用。

posted @ 2016-10-22 11:19  米瑞蔻马  阅读(232)  评论(0编辑  收藏  举报