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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM