package xxj.datastructure0810;

import java.util.Random;

public class DataStructure {

    /**
* @param args
*/
public static void main(String[] args) {
String [] array = {"1","2","3"}; MyArrayList<String> mal = new MyArrayListImpl<String>(); // mal.add(100);
// mal.add(new Object()); for(int i=0;i<array.length;i++){
mal.add(array[i]);
} Random rand = new Random();
int size = rand.nextInt(20); for(int i=0;i<size;i++){
mal.add(""+((char)(rand.nextInt(26)+97)));
} System.out.println("size = "+size); for(int i=0;i<mal.size();i++){
System.out.println(mal.get(i));
} } }
package xxj.datastructure0810;

/**
* 自定义数组队列的接口,同时使用<E>表示该接口支持泛型
*/
public interface MyArrayList<E> { /**
* 添加元素到数组队列中的方法
* @param e要添加的元素
*/
public void add(E e); /**
* 向数组队列中指定的位置插入一个新的元素
* @param index要插入元素的所在的索引位置
* @param e要插入的新元素
* @return 返回true表示插入成功,返回false表示插入失败
*/
public boolean add(int index,E e); /**
* 根据指定的索引位置,从数组队列中移除一个元素
* @param index要移除元素所在的索引位置
* @return 返回null表示移除失败,否则会返回移除的元素
*/
public E remove(int index); /**
* 移除指定的元素
* @param e要移除的元素
* @return 返回值true表示执行成功,返回false表示执行失败
*/
public boolean remove(E e); /**
* 修改指定索引位置的元素
* @param index要修改元素的位置
* @param e新的元素
* @return 返回值true表示执行成功,返回false表示执行失败
*/
public boolean update(int index,E e); /**
* 修改指定元素的内容
* @param oldE要修改的元素
* @param e新的元素
* @return 返回值true表示执行成功,返回false表示执行失败
*/
public boolean update(E oldE,E e); /**
* 获取数组队列中存储的元素总数
* @return 返回数组队列中存储的元素总数属性
*/
public int size(); /**
* 获取指定索引位置的元素
* @param index要获取元素的索引位置
* @return 返回null表示获取失败,否则会返回获取到的元素
*/
public E get(int index);
}
package xxj.datastructure0810;

/**
* 定义数组队列的实现类,该类实现了MyArrayList接口
*
* @author 熊哥
*
*/
public class MyArrayListImpl<E> implements MyArrayList<E> { // 声明一个数组名
private Object[] array;
// 声明一个记录存储元素总数的属性名
private int size; /**
* 构造方法
*/
public MyArrayListImpl() {
array = new Object[1];
} // public MyArrayListImpl(int i){
// array = new String[i];
// } /**
* 添加元素到数组队列中的方法
*
* @param e要添加的元素
*/
public void add(E e) {
if (size == 0)
array[0] = e;
else {
// 根据所添加元素的的个数来创建新的数组,新数组的长度是size+1
Object[] newArray = new Object[size + 1];
// 将新元素str添加到newArray数组的末尾
newArray[size] = e; // 将原始数组中的数据存入到新数组中
for (int i = 0; i < size; i++) {
newArray[i] = array[i];
} // 新数组的地址赋给原始数组
array = newArray;
}
// 记录元素总数增加1.
size++;
} /**
* 向数组队列中指定的位置插入一个新的元素
*
* @param index要插入元素的所在的索引位置
* @param e要插入的新元素
* @return 返回true表示插入成功,返回false表示插入失败
*/
public boolean add(int index, E e) { return false;
} /**
* 根据指定的索引位置,从数组队列中移除一个元素
*
* @param index要移除元素所在的索引位置
* @return 返回null表示移除失败,否则会返回移除的元素
*/
public E remove(int index) { return null;
} /**
* 移除指定的元素
*
* @param e要移除的元素
* @return 返回值true表示执行成功,返回false表示执行失败
*/
public boolean remove(E e) { return false;
} public boolean removeAll(E e) { return false;
} /**
* 修改指定索引位置的元素
*
* @param index要修改元素的位置
* @param e新的元素
* @return 返回值true表示执行成功,返回false表示执行失败
*/
public boolean update(int index, E e) { return false;
} /**
* 修改指定元素的内容
*
* @param oldE要修改的元素
* @param e新的元素
* @return 返回值true表示执行成功,返回false表示执行失败
*/
public boolean update(E oldE, E e) { return false;
} /**
* 获取数组队列中存储的元素总数
*
* @return 返回数组队列中存储的元素总数属性
*/
public int size() {
return size;
} /**
* 获取指定索引位置的元素
*
* @param index要获取元素的索引位置
* @return 返回null表示获取失败,否则会返回获取到的元素
*/
public E get(int index) {
if (index < 0 || index >= size)
return null;
return (E)array[index];
}
}

1.数组:

数组是属于数据结构中的一种线性结构。

数据对象在内存中的储存方式是一种线性结构。

数组定义的方式:
         数据类型 [] 数组名 = new 数据类型[长度];
         数据类型 [] 数组名 = {数据,...};
         数据类型 [] 数组名 = new 数据类型[]{数据,...};
         数据类型 [] 数组名;
         数组名 = new 数据类型[长度];
         数组名 = new 数据类型[]{数据,...};
         //错误示范
         数组名 = {数据,。。。}

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

数组是否是一个类?
         是的
         数组是类,那么肯定提供了属性和方法,那么数组有哪些属性和方法呢?
         数组只有一个唯一的length属性,该属性是用来获取数组长度

获取或设置一维数组中某一个位置的数据:数组名[下标]
         获取一维数组能存储多少个元素:数组名.length
 
         获取或设置二维数组中某一个位置的数据:数组名[行下标][列下标]
         获取二维数组的行数:数组名.length
         获取二维数组的列数:数组名[行下标].length
         获取二维数组能存储多少个元素:
         数组名.length*数组名[行下标].length //不适用于所有情况
         数组名[行下标].length+...

除了0可以直接给数字之外,其他的都通过length来获取
         数组下标只会从0开始。

2.数组队列
1.数组有什么优点和缺点?
                          优点:
                                存取数据是所有数据结构中速度最快的一种,你在获取或设置数据时,
                                可以直接通过下标定位。

缺点:
                                如果你要存储的数据不确定时,数组在创建时需要给予的长度就是缺点。
                                1.创建数组小了,存储不下数据
                                2.创建数组大了,浪费内存空间
                                 如果在项目中特定情况下只能存储一种数据类型;在项目的两一个位置
                                 需要存储N种数据类型;这样数组在创建时需要指定固定的类型就会是缺点。

2.数组队列的实现
                                 数组队列的实现原理:借助于数组名中存储的是数组对象在内存中的首地址。

interface MyArrayList.java 父接口,定义数组中所需要实现的方法
                                  class MyArrayListImpl.java 子类,实现接口中所有的抽象方法。

使用泛型来解决第二个问题。
                                  泛型是Java中的一种特殊符号,不能把它当做任何一个种数据类型。
                                  但是它可以泛指Java所有的数据类型(基本数据类型,引用类型)。
                                  Java中的泛型有E(元素)、K(键)、V(值)。

JAVA之数组队列的更多相关文章

  1. Java中的自定义数组队列

    在Java中,作为所有数据结构中存储和获取速度最快的一种,数组凭借其这种简单易用的优势在各个方面都能大显神威.但是数组也有自身的局限性.数组的长度必须是固定的一旦定义之后就无法动态的更改,这就会造成这 ...

  2. 三 基于Java动态数组手写队列

    手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...

  3. 【栈和队列】5、队列概述与数组队列的基本实现 - Java

    3-5 数组队列 简单记录 - bobo老师的玩转算法系列–玩转数据结构 - 栈和队列 队列Queue 队列也是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另 ...

  4. java——数组队列 ArrayQueue

    队列: Array: package Date_pacage; public class Array<E> { //叫它静态数组 //private int[] data; private ...

  5. Java多线程 阻塞队列和并发集合

    转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的 ...

  6. Java的数组,集合,数据结构,算法(一)

    本人的愚见,博客是自己积累对外的输出,在学习初期或自己没有多少底料的情况下,与其总结写博客不如默默去搞自己的代码,但是学到集合这一块时,数组,集合,数据结构,算法这个概念搞的我比较混淆,所以不得已写这 ...

  7. Java 中的队列 Queue

    一.队列的定义 我们都知道队列(Queue)是一种先进先出(FIFO)的数据结构,Java中定义了java.util.Queue接口用来表示队列.Java中的Queue与List.Set属于同一个级别 ...

  8. Java集合--阻塞队列及各种实现的解析

    阻塞队列(Blocking Queue) 一.队列的定义 说的阻塞队列,就先了解下什么是队列,队列也是一种特殊的线性表结构,在线性表的基础上加了一条限制:那就是一端入队列,一端出队列,且需要遵循FIF ...

  9. Java:阻塞队列

    Java:阻塞队列 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. 概述 概念 队列 队列就可以想成是一个数组,从一头进入,一头出去,排队买饭 阻塞队列 B ...

随机推荐

  1. hibernate学习(1)

    对象的持久化 狭义的理解,“持久化”仅仅指把对象永久保存到数据库中 广义的理解,“持久化”包括和数据库相关的各种操作 -保存:把对象永久保存到数据库中 -更新:更新数据库中对象的状态 -删除:从数据库 ...

  2. ie 元素兼容性总结

    css 属性元素 2.z-index 正常按自身层级决定显示顺序,在ie6 7 还需要依赖于父级的层级决定,排布在后边的元素排在前面.后来者居上覆盖前者. IE6,7支持inline元素转换成inli ...

  3. PHP中获取文件扩展名的N种方法

    PHP中获取文件扩展名的N种方法 从网上收罗的,基本上就以下这几种方式: 第1种方法:function get_extension($file){substr(strrchr($file, '.'), ...

  4. hdoj-3791-二叉搜索树(二叉搜索树模板题)

    #include <cstring> #include <cstdio> #include <iostream> using namespace std; type ...

  5. PhotoShop使用指南(2)——下雨动画效果

    第一步: 第二步: 第三步: 第四步:

  6. linux内嵌汇编语言

    http://blog.chinaunix.net/uid-21254310-id-1828921.html http://www.cnblogs.com/lxgeek/archive/2011/01 ...

  7. linux shell 学习笔记--变量声明与赋值,循环

    Bash 变量是不分类型的 ------------------------ 不像其他程序语言一样,Bash 并不对变量区分"类型".本质上,Bash 变量都是字符串. 但是依赖于 ...

  8. [TopCoder12727]FoxAndCity

    vjudge 题意 你有一张\(n\)点的无向图,每个点有一个点权\(w_i\).图中原来存在一些边,你可以任意给这张图加上一些边. 记点\(i\)到点\(1\)的距离为\(d_i\),你需要最小化\ ...

  9. webpack 故障处理

    Webpack 的配置比较复杂,很容出现错误,下面是一些通常的故障处理手段. 一般情况下,webpack 如果出问题,会打印一些简单的错误信息,比如模块没有找到.我们还可以通过参数 --display ...

  10. Eclipse jar包源码下载

    在使用intelliJ的时候,可以在IDE中直接下载jar包: Eclipse也可以!就是插件Java Source Attacher 这个插件是放在eclipse安装目录的dropins目录下.重启 ...