欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例

 更新時間:2014年03月17日 09:18:46   作者:  
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)順序表示例,需要的朋友可以參考下

復(fù)制代碼 代碼如下:

import java.util.Arrays;
/**
 * 順序線性表的實現(xiàn)
 */
public class LineList<E>{

 private int size;   //長度
 private Object[] array;  //底層數(shù)組
 private final int default_length=16; //默認(rèn)長度
 /**
  * 無參構(gòu)造方法
  */
 public LineList(){
  size = 0;
  //使用默認(rèn)長度構(gòu)造數(shù)組
  array = new Object[default_length];
 }
 /**
  * 指定長度進行構(gòu)造
  * @param length 指定初始長度
  */
 public LineList(int length){
  if(length<0){
   throw new IllegalArgumentException("初始長度不合法:"+length);
  }
  //使用指定長度構(gòu)造數(shù)組
  array = new Object[length];
 }

 /**
  * 指定初始化元素和長度進行構(gòu)造
  * @param element 初始化元素
  * @param length 初始化長度
  */
 public LineList(E element,int length){
  if(length<1){
   throw new IllegalArgumentException("初始長度不合法:"+length);
  }
  //使用指定長度構(gòu)造數(shù)組
  array = new Object[length];
  //初始化第一個元素
  array[0] = element;
  size++;
 }
 /**
  * 指定初始化元素進行構(gòu)造
  * @param element 初始化元素
  */
 public LineList(E element){
  //使用默認(rèn)長度初始化數(shù)組
  array = new Object[default_length];
  //初始化第一個元素
  array[0] = element;
 }

 /**
  * 獲取元素個數(shù)
  */
 public int size() {
  return size;
 }

 /**
  * 判斷是否為空
  */
 public boolean isEmpty() {
  return size==0;
 }

 /**
  * 判斷是否包含此元素
  */
 public boolean contains(E e) {
  if(indexOf(e) == -1){
   return false;
  }
  return true;
 }

 /**
  * 格式化為數(shù)組
  */
 public Object[] toArray() {
  return Arrays.copyOf(array, size);
 }

 /**
  * 向線性表尾部添加一個元素
  * @param e
  * @return
  */
 public void add(E e) {
  extendCapacity(size+1);
  array[size]=e;
  size++;
 }

 /**
  * 擴容
  * @param length 需要的長度
  */
 private void extendCapacity(int length){
  //當(dāng)前數(shù)組長度和需要的長度取最大
  int minCapacity = Math.max(array.length, length);
  //判斷是否需要擴容
  if(minCapacity - array.length>0){
   //數(shù)組長度增加一半
   int newLength = array.length + array.length/2;
   //如果新的長度還比需求要小,將需求的長度作為數(shù)組長度
   if(newLength < minCapacity){
    newLength=minCapacity;
   }
   //數(shù)組長度不能超過Integer.Max_Value
   if(newLength > Integer.MAX_VALUE - 8){
    newLength = Integer.MAX_VALUE;
   }
   //數(shù)組擴容
   array = Arrays.copyOf(array, newLength);
  }
 }
 /**
  * 從線性表中移除所有此元素
  * @param e 需要移除的元素
  * @return
  */
 public void removeAll(E e) {
  if(e==null){
   for(int i=0;i<size;i++){
    if(array[i]==null){
     fastRemove(i);
    }
   }
  }else{
   for(int i=0;i<size;i++){
    if(e.equals(array[i])){
     fastRemove(i);
    }
   }
  }
 }

 /**
  * 刪除索引處元素,后面的元素依次前移
  * @param index 需要刪除的索引
  */
 private void fastRemove(int index){
  if(size-index-1>0){  
   //數(shù)組從index+1開始全部前移
   System.arraycopy(array, index+1, array, index, size-1);
  }
  //最后一個元素請空
  array[--size]=null;
 }

 /**
  * 清空線性表
  */
 public void clear() {
  //將數(shù)組全部填充為null
  Arrays.fill(array, null);
  //將元素個數(shù)改為0
  size=0;
 }
 /**
  * 獲得索引處的元素
  * @param index
  * @return 索引處的元素
  */
 @SuppressWarnings("unchecked")
 public E get(int index) {
  checkIndex(index);
  return (E)array[index];
 }

 /**
  * 驗證是否為索引越界
  * @param index
  */
 private void checkIndex(int index){
  if(index>=size || index<0){
   throw new IndexOutOfBoundsException("索引越界");
  }
 }

 /**
  * 將索引處的元素修改為新的元素
  * @param index 索引位置
  * @param element 元素
  * @return 原索引處的元素
  */
 @SuppressWarnings("unchecked")
 public E set(int index, E element) {
  checkIndex(index);
  E e = (E)array[index];
  array[index]=element;
  return e;
 }

 /**
  * 在指定的索引處插入指定的元素
  * @param index 索引位置
  * @param element 元素
  */
 public void add(int index, E element) {
  //驗證索引
  checkIndex(index);
  //是否需要擴容
  extendCapacity(size+1);
  //復(fù)制數(shù)組
  System.arraycopy(array, index, array, index+1, size-index);
  array[index]=element;
 }

 /**
  * 移除索引處的元素
  * @param index 索引
  * @return 刪除了的元素
  */
 @SuppressWarnings("unchecked")
 public E remove(int index) {
  checkIndex(index);
  //取得索引位置的元素
  E e = (E)array[index];
  fastRemove(index);
  return e;
 }

 /**
  * 取得元素第一次出現(xiàn)的位置的索引
  * @param e 要查找的元素
  * @return 如果為-1說明線性表沒有這個元素
  */
 public int indexOf(E e) {
  if(e==null){
   for(int i=0;i<size;i++){
    if(e==array[i]){
     return i;
    }
   }
  }
  for(int i=0;i<size;i++){
   if(e.equals(array[i])){
    return i;
   }
  }
  return -1;
 }

 /**
  * 取得元素最后一次出現(xiàn)的位置的索引
  * @param e 要查找的元素
  * @return 如果為-1說明線性表沒有這個元素
  */
 public int lastIndexOf(E e) {
  //判斷元素是否為null
  if(e==null){    
   for(int i=size-1;i>=0;i--){
    if(e==array[i]){
     return i;
    }
   }
  }
  for(int i=size-1;i>=0;i--){
   //如果為null這里會跑出NullPoint異常
   //所以前面要加上驗證是否為Null
   if(e.equals(array[i])){
    return i;
   }
  }
  return -1;
 }

 /**
  * 截取線性表
  * @param fromIndex 開始索引
  * @param toIndex 結(jié)束索引
  * @return 截取的線性表
  */
 @SuppressWarnings("unchecked")
 public LineList<E> subList(int fromIndex, int toIndex) {
  //判斷開始索引是否越界
  if(fromIndex<0 || fromIndex >=size){
   throw new IndexOutOfBoundsException("開始索引越界:"+fromIndex);
  }
  //判斷結(jié)束索引是否越界
  if(toIndex >=size || fromIndex <0){
   throw new IndexOutOfBoundsException("結(jié)束索引越界:"+toIndex);
  }
  //判斷開始索引和結(jié)束索引是否正確
  if(fromIndex > toIndex){
   throw new IllegalArgumentException("參數(shù)不正確,開始索引應(yīng)大于等于結(jié)束索引");
  }
  LineList<E> list = new LineList<E>();
  for(int i=fromIndex,j=toIndex;i<=j;i++){
   list.add((E)array[i]);
  }
  return list;
 }
}

相關(guān)文章

  • RabbitMQ交換機與Springboot整合的簡單實現(xiàn)

    RabbitMQ交換機與Springboot整合的簡單實現(xiàn)

    這篇文章主要介紹了RabbitMQ交換機與Springboot整合的簡單實現(xiàn),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • java實現(xiàn)任意矩陣Strassen算法

    java實現(xiàn)任意矩陣Strassen算法

    這篇文章主要介紹了java實現(xiàn)任意矩陣Strassen算法的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Java項目中classpath類路徑是什么

    Java項目中classpath類路徑是什么

    classpath指的是類路徑,也就是編譯之后的target文件夾下的WEB-INF/class文件夾,下面這篇文章主要給大家介紹了關(guān)于Java項目中classpath類路徑是什么的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 深入了解Java內(nèi)部類的用法

    深入了解Java內(nèi)部類的用法

    java類的五大成員:屬性,方法,構(gòu)造器(構(gòu)造方法),代碼塊,內(nèi)部類。本文就來和大家詳細(xì)講講ava內(nèi)部類的用法,需要的小伙伴可以參考一下
    2022-07-07
  • Java實現(xiàn)視頻時間維度剪切的工具類

    Java實現(xiàn)視頻時間維度剪切的工具類

    這篇文章主要為大家詳細(xì)介紹了將視頻按照時間維度進行剪切的Java工具類,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • mybatis映射和實際類型不一致的問題

    mybatis映射和實際類型不一致的問題

    這篇文章主要介紹了mybatis映射和實際類型不一致的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • MyBatis緩存功能原理及實例解析

    MyBatis緩存功能原理及實例解析

    這篇文章主要介紹了MyBatis緩存功能原理及實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 基于hibernate框架在eclipse下的配置方法(必看篇)

    基于hibernate框架在eclipse下的配置方法(必看篇)

    下面小編就為大家?guī)硪黄趆ibernate框架在eclipse下的配置方法(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Sentinel實現(xiàn)動態(tài)配置的集群流控的方法

    Sentinel實現(xiàn)動態(tài)配置的集群流控的方法

    這篇文章主要介紹了Sentinel實現(xiàn)動態(tài)配置的集群流控,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 如何用IDEA調(diào)試BUG的幾種方法

    如何用IDEA調(diào)試BUG的幾種方法

    這篇文章主要介紹了如何用IDEA調(diào)試BUG的幾種方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2020-03-03

最新評論