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

  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/chang1203/p/5855053.html
Copyright © 2020-2023  润新知