JAVA之数组队列

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(值)。

时间: 2024-10-22 00:32:05

JAVA之数组队列的相关文章

JAVA实现数组队列,循环数组队列,链式队列

/** * 文件名:QueueText.java * 时间:2014年10月22日下午9:05:13 * 作者:修维康 */ package chapter3; /** * 类名:ArrayQueue * 说明:队列的数组实现 */ class ArrayQueue<AnyType>{ private static final int DEFAULT_CAPACITY = 10; private int front;//队头 private int rear;//队尾 private int

Java用数组实现循环队列

复习了下数据结构,用Java的数组实现一下循环队列. 队列的类 1 //循环队列 2 class CirQueue{ 3 private int QueueSize; 4 private int front; 5 private int rear; 6 private int[] queueList ; 7 8 public CirQueue(int QueueSize){ 9 this.QueueSize = QueueSize; 10 queueList = new int[QueueSiz

Java中的自定义数组队列

在Java中,作为所有数据结构中存储和获取速度最快的一种,数组凭借其这种简单易用的优势在各个方面都能大显神威.但是数组也有自身的局限性.数组的长度必须是固定的一旦定义之后就无法动态的更改,这就会造成这样的问题,如果数组已满,就无法继续添加数据(当然你可以定义一个"足够大的数组",但问题是多大才是足够大呢?太小不够,太大浪费内存空间).如果删除一个数据,它的内存空间空着没有被使用.另外数组只能存储同一类型的数据,如果把它设置成Object类型的话,是可以存不同类型的数据了,但是设想这样一

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

转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的线程安全的集合类,通过下面的学习,您需要掌握这些集合的特点是什么,底层实现如何.在何时使用等问题. 3.1 BlockingQueue接口 java阻塞队列应用于生产者消费者模式.消息传递.并行任务执行和相关并发设计的大多数常见使用上下文. BlockingQueue在Queue接口基础上提供了额外

循环队列:解决数组队列出队的时间复杂度

思路分析: 1.记录数组的队首和队尾的位置,当front 和tail指在一起的时候数组为空. 2.出队的时候front指针往后挪一位.这样出队操作就由数组队列的 O(N) 变成  循环队列的O(1)了. 让数组循环利用起来: 当前索引+1 再百分之我们数组的长度    比如我们到了最后一位7, 7+1 = 8 就是我们数组的长度    8对8 求余 = 0 就跟钟表一样   找到它的范围  然后让它在范围内循环.    1%12 = 1;  2 % 12 = 2; .... 11%12=11 1

java的数组index[]方括号内是可以进行算数运算的

java的数组index[]方括号内饰可以进行算数运算的 如: String[] stringArray = testString.split("\\."); System.out.println(stringArray[stringArray.length-1]); 2.非静态方法可以调用静态方法 因为静态方法是类加载时期就进行了,非静态方法是运行时期

Java中数组的特性

转载:http://blog.csdn.net/zhangjg_blog/article/details/16116613 数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间.在C,C++等语言中,数组的定义简洁清晰,而在Java中确有一些会让人迷惑的特性.本文就尝试分析这些特性. Java中的数组是对象吗? Java和C++都是面向对象的语言.在使用这些语言的时候,我们可以直接使用标准的类库,也可以使用组合和继承等面向对象的特性

在java 中,数组与 List&lt;T&gt; 类型的相互转换

在java中,数组与List<T> 之前进行互相转换,转换方法可总结为以下几种: 一. 将 数组转换成List<T> 1. 使用 Collections 的addAll 方法 String[] myStr = {"1","2","4","9","7"}; List<String> listStr = new ArrayList<String>(); Colle

java基础:java环境,第一个Java程序,java的数组

java环境: 1. 什么是字节码和虚拟机? 2. 环境变量的设置 3.一些常用的java命令 4. 计算机如何运行java程序? 5. java的垃圾回收器 6. java的基本数据类型及转换 举例:第一个Java程序 Java的数组: 1. 一维数组 数组的声明 数组分配空间及初始化 数组的长度 两个数组之间的拷贝:System.arraycopy(array1,start,array2,start,length) 2. 二位数组 二维数组的声明及初始化