你的位置:首页 > Java教程

[Java教程]使用JAVA数组实现顺序表


1,引入了JAVA泛型类,因此定义了一个Object[] 类型的数组,从而可以保存各种不同类型的对象。

2,默认构造方法创建了一个默认大小为16的Object数组;带参数的构造方法创建一个指定长度的Object数组

3,实现的顺序表的基本操作有:返回表的长度、获取指定索引处的元素(注意是索引,而不是位置。索引以下标0开始,位置以下标1开始)、按值查找数据元素的位置、直接插入元素(顺序表尾部)、向指定位置插入元素、直接删除元素(在顺序表尾部)、删除指定索引处元素、判断表是否为空、清空表。

 1 import java.util.Arrays; 2  3 public class SequenceList<T> { 4   private final int DEFAULT_SIZE = 16;//final实例变量显示指定初始值,且不再变化。 5    6   private Object[] elementData;//该数组用来保存顺序表中的元素 7   private int capacity;//保存数组的长度 8   private int size;//保存顺序表中当前元素的个数 9    10   //以默认的大小创建顺序表 11   public SequenceList(){ 12     capacity = DEFAULT_SIZE; 13     elementData = new Object[capacity]; 14   } 15    16   //以指定的大小创建顺序表 17   public SequenceList(int initSize){ 18     capacity = 1; 19     while(capacity < initSize) 20       capacity <<= 1;//将capacity设置成大于initSize的最小2次方 21     elementData = new Object[capacity]; 22   } 23    24   //获取顺序表中当前元素的个数 25   public int length(){ 26     return size; 27   } 28    29   //获取顺序表中索引为 i 处的元素,i表示索引,即以 0 开始 30   public T get(int i){ 31     if(i < 0 || i > size - 1) 32       throw new IndexOutOfBoundsException("顺序表索引越界"); 33     return (T)elementData[i]; 34   } 35    36   //查看顺序表中指定元素的索引,若未找到,返回-1 37   public int locate(T element){ 38     for(int i = 0; i < size; i++) 39       if(elementData[i].equals(element)) 40         return i; 41     return -1; 42   } 43    44   //在顺序表的指定索引处插入一个元素 45   public void insert(T element, int index){ 46     if(index < 0 || index > size) 47       throw new IndexOutOfBoundsException("顺序表索引越界"); 48     ensureCapacity(size + 1);//确保顺序表满时进行扩容,从而能插入元素 49     //将指定索引后的所有元素向后移动一个位置 50 //    System.arraycopy(elementData, index, elementData, index + 1, size - index); 51     for(int i = size; i > index; i--) 52       elementData[i] = elementData[i - 1]; 53     elementData[index] = element; 54     size++;//顺序表中的元素个数增1 55   } 56    57   private void ensureCapacity(int minCapacity){ 58     //当数组容量已满时,对数组进行扩容。将容量扩展到大于minCapacity的最小2的次方 59     if(minCapacity > capacity){ 60       while(capacity < minCapacity) 61         capacity <<= 1; 62       elementData = Arrays.copyOf(elementData, capacity); 63     } 64   } 65    66   //在顺序表的末尾添加一个元素 67   public void add(T element){ 68     insert(element, size); 69   } 70    71   //删除顺序表中指定索引处的元素 72   public T delete(int index){ 73     if(index < 0 || index > size - 1) 74       throw new IndexOutOfBoundsException("顺序表索引越界"); 75     T oldValue = (T)elementData[index]; 76     int numMoved = size - index - 1;//计算需要移动的元素个数 77     if(numMoved > 0){ 78       System.arraycopy(elementData, index + 1, elementData, index, numMoved); 79     } 80     elementData[--size] = null;//让垃圾回收器及时回收,避免内存泄露 81     return oldValue; 82   } 83    84   //删除顺序表中的最后一个元素 85   public T remove(){ 86     return delete(size - 1); 87   } 88    89   //判断顺序表是否为空表 90   public boolean empty(){ 91     return size == 0; 92   } 93    94   //清空顺序表 95   public void clear(){ 96     Arrays.fill(elementData, null);//将数组elementData中的每个元素都赋值null 97     size = 0; 98   } 99   100   public String toString(){101     if(size == 0)102       return "[]";103     else{104       StringBuilder sb = new StringBuilder("[");105       for(int i = 0; i < size; i++)106         sb.append(elementData[i].toString() + ", ");107       int len = sb.length();108       //删除由于上面for循环中最后添加的多余的两个字符 (一个是逗号,一个是空格符号)109       return sb.delete(len - 2, len).append("]").toString();110     }111   }112 }

 




深圳去浙江旅游报价跟团去浙江旅游多少钱几月去浙江旅游最好去浙江的旅游团价格去浙江旅游必去景点红螺寺门票_红螺寺门票价格_红螺寺门票多少钱 北京动物园门票价格_北京动物园门票_北京动物园门票要多少钱 崇明岛在哪_崇明岛在哪里_崇明岛在哪个省 狼牙山门票_狼牙山旅游门票价格_狼牙山门票多少钱 母亲节逛世园会消费风潮席卷而来 爱上澳洲 从海豚岛开始 小技巧除大油腻 世园会绿色农产品严把质量安全关 萃溪江漂流开漂了吗?诸暨萃溪江漂流开漂时间? 昌乐坐车怎么到潍坊富华游乐园?昌乐到富华游乐园乘车路线? 上海大观园几个小时能玩完?上海大观园游玩需要多久? 昌乐到富华游乐园怎么走?昌乐到潍坊富华怎么坐车? 元旦去三亚穿什么衣服好?元旦三亚天气怎么样? 2015龙凤山庄影视度假村圣诞节活动?东莞龙凤山庄圣诞平安夜好玩吗? 行摄发现美 大同历史之壮美 2015佛山三水荷花世界圣诞节活动?三水荷花世界圣诞平安夜好玩吗? IXTQ14N60P Datasheet IXTQ14N60P Datasheet 2SK2953 Datasheet 2SK2953 Datasheet 2SK2953(F) Datasheet 2SK2953(F) Datasheet 深圳莲花山公园好玩吗 深圳莲花山公园好玩吗 深圳莲花山公园好玩吗 樟木头观音山好玩吗 樟木头观音山好玩吗 樟木头观音山好玩吗 从化泡温泉 从化泡温泉 从化泡温泉