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

Java自定義長度可變數(shù)組的操作

 更新時間:2021年02月04日 09:49:10   作者:miss_rong  
這篇文章主要介紹了Java自定義長度可變數(shù)組的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我們都知道數(shù)組是線性的、類型固定、內(nèi)存地址連續(xù)、定長的,主要是數(shù)組一旦被定義,那么它的長度也就定下來了,只能添加有限的數(shù)據(jù)。而長度可變的數(shù)組是要將這個長度打破,實現(xiàn)數(shù)組數(shù)據(jù)無限增加

那么定義長度可變的數(shù)組就可以用兩個數(shù)組來實現(xiàn)數(shù)組長度的變化。為了避免每次增加數(shù)據(jù)或刪除數(shù)據(jù)時都要重新開辟空間,我先設定原數(shù)組為固定長,在當數(shù)組放滿時,一次增加一定的長度,這樣 節(jié)省了開辟空間的時間

因為數(shù)組里的數(shù)據(jù)類型是不確定的,所以用泛型比較好

public class MyList<E> {
 private int rongliang;//容量
 private int zengliang;//增量
 private int num;//數(shù)量
 
 //定義一個原數(shù)組
 //Object類包含所有的類型,所以定義數(shù)組是用Object類
 private Object[] src;
 
 //三個不同的構造方法
 public MyList(){
 this(10,10);
 }
 
 public MyList(int rongliang){
 this(rongliang,10);
 }
 
 public MyList(int rongliang,int zengliang){
 this.rongliang = rongliang;
 this.zengliang = zengliang;
 src = new Object[rongliang];
 }
}

在MyList中實現(xiàn)在數(shù)組中添加數(shù)據(jù),要考慮到數(shù)組中的數(shù)據(jù)數(shù)量小于數(shù)組長度時,可以直接在數(shù)組為null處添加數(shù)據(jù),但當數(shù)組的數(shù)量大于等于數(shù)組長度時,要先重新定義一個數(shù)組,長度是原數(shù)組加增量,然后再添加數(shù)據(jù)

public void add(E s){
 //判斷數(shù)組中的數(shù)據(jù)數(shù)量num是否大于數(shù)組的長度(容量),超出則需擴容
 if(num>=src.length){
 //定義一個新的數(shù)組,長度是原有的長度加增量
 Object arr[] = new Object[src.length+zengliang];
 //拷貝數(shù)組數(shù)據(jù)
 System.arraycopy(arr, 0, arr, 0, src.length);
 src = arr;
 }
 //如果num不大于數(shù)組的長度,則不需擴容,直接加入
 //如果num大于等于數(shù)組長度,則需執(zhí)行上面的if語句擴容,再加入數(shù)據(jù)
 //最后num++
 src[num++] = s;
 }

取出指定下標的數(shù)據(jù),因為傳入的是下標的參數(shù),所以要判斷數(shù)組的下標是否越界,拋出異常

public E get(int index){
 //拋出異常
 if(index<0 || index>=num){
 throw new IndexOutOfBoundsException("下標越界!index:"+index+",size:"+num);
 }
 //強制轉(zhuǎn)換成E類型
 return (E)src[index];
 }

修改指定下標的數(shù)據(jù),因為傳入的是下標的參數(shù),所以要判斷數(shù)組的下標是否越界,拋出異常

public void modify(int index,E s){
 //拋出異常
 if(index<0 || index>=num){
 throw new IndexOutOfBoundsException("下標越界!index:"+index+",size:"+num);
 }
 src[index] = s;
 }

刪除指定下標的數(shù)據(jù),當數(shù)組中null值的長度大于等于增量時,要將數(shù)組的容量減小,防止浪費

public void delete(int index){
 //拋出異常
 if(index<0 || index>=num){
 throw new IndexOutOfBoundsException("下標越界!index:"+index+",size:"+num);
 }
 //將>index的數(shù)據(jù)依次向前移動一位
 System.arraycopy(src, index+1, src, index, num-index-1);
 num--;
 //減少容量的方法
 if(src.length-num>=zengliang){
   //定義一個新的數(shù)組,長度是原先數(shù)組的長度減去增量
     Object arr[] = new Object[src.length-zengliang];
   //拷貝數(shù)組
     System.arraycopy(src, 0, arr, 0, num);
   src = arr;
 }
 }

將指定下標處的數(shù)據(jù)改為指定的數(shù)據(jù)

public void insert(int index,E s){
 //拋出異常
 if(index<0 || index>=num){
 throw new IndexOutOfBoundsException("下標越界!index:"+index+",size:"+num);
 }
 //判斷數(shù)組中的數(shù)據(jù)數(shù)量num是否大于數(shù)組的長度(容量),超出則需擴容
 if(num>=src.length){
   //定義一個新的數(shù)組,長度是原有的長度加增量
   Object arr[] = new Object[src.length+zengliang];
   //拷貝數(shù)組數(shù)據(jù)
   System.arraycopy(src, 0, arr, 0, src.length);
   src = arr;
 }
 //將>index的數(shù)據(jù)依次向后移動一個位置
 //arraycopy()是可以將數(shù)據(jù)自己拷貝給自己
 System.arraycopy(src, index, src, index+1, num-index);
 //插入數(shù)據(jù)
 src[index] = s;
 num++;
 }

最后在寫個獲取數(shù)組中數(shù)據(jù)的個數(shù),而不是數(shù)組的長度

public int size(){
   return num;
 }

寫個測試類,來測試這個長度可變的數(shù)組是否可行

public class test {
 
 public static void main(String[] args) {
 //創(chuàng)建一個MyList對象
 // 在創(chuàng)建對象時明確類型
 MyList<String> list = new MyList<String>();
 
 //添加數(shù)據(jù)
 list.add("a");
 list.add("b");
 list.add("c");
 list.add("d");
 list.add("e");
 list.add("f");
 list.add("g");
 list.add("h");
 list.add("i");
 list.add("j"); 
 
 //遍歷數(shù)組
 for(int i=0;i<list.size();i++){
 String s = list.get(i);
 System.out.print(s+" ");
 }
 
 System.out.println("");
 int n = list.size();
   System.out.println("數(shù)據(jù)個數(shù)為:"+n);
 System.out.println("**********************************************");
 
 //修改指定位置的數(shù)據(jù)
 list.modify(1, "QQ");
 
 //遍歷數(shù)組
 for(int i=0;i<list.size();i++){
 String s = list.get(i);
 System.out.print(s+" ");
 }
 
 System.out.println("");
 int m = list.size();
 System.out.println("數(shù)據(jù)個數(shù)為:"+m);
 System.out.println("**********************************************");
 
 //刪除指定位置的數(shù)據(jù)
 list.delete(2);
 
 //遍歷數(shù)組
 for(int i=0;i<list.size();i++){
 String s = list.get(i);
 System.out.print(s+" ");
 }
 
 System.out.println("");
   int k = list.size();
   System.out.println("數(shù)據(jù)個數(shù)為:"+k);
 System.out.println("**********************************************");
 
 //在指定位置插入指定的數(shù)據(jù)
 list.insert(3, "zr");
 list.insert(3, "qi");
 
 //遍歷數(shù)組
 for(int i=0;i<list.size();i++){
 String s = list.get(i);
 System.out.print(s+" ");
 }
 
 System.out.println("");
 int h = list.size();
   System.out.println("數(shù)據(jù)個數(shù)為:"+h);
 System.out.println("**********************************************");
 }
 
}

最終數(shù)組的結果為:

a b c d e f g h i j 
數(shù)據(jù)個數(shù)為:10
**********************************************
a QQ c d e f g h i j 
數(shù)據(jù)個數(shù)為:10
**********************************************
a QQ d e f g h i j 
數(shù)據(jù)個數(shù)為:9
**********************************************
a QQ d qi zr e f g h i j 
數(shù)據(jù)個數(shù)為:11
**********************************************

補充:在Java中創(chuàng)建一個自定義長度的數(shù)組并輸入每個元素

用到知識點:數(shù)組、方法、Scanner、for循環(huán)。

作業(yè):

package Array;
import java.util.Scanner;
public class InputArray {
public static void main(String[] args) {
shuzu();//方法調(diào)用 
 }
 //方法定義
 public static void shuzu() {
 
 //將輸入的數(shù)字作為數(shù)組的長度
 Scanner sz = new Scanner(System.in);
 System.out.println("請輸入數(shù)組長度:");//提示可以操作
 int[] cd = new int[sz.nextInt()];//數(shù)組初始化完成
 System.out.println("當前數(shù)組長度定義為:"+cd.length);//再提示一下結果
 
 //用for循環(huán)為每一個元素賦值
 for (int i = 0; i < cd.length; i++) {
  int q = i+1;//這里q用作提示,避免提示出第0個元素。
  System.out.println("請輸入第"+q+"個元素的值:");
  cd [i] = sz.nextInt();
  System.out.println("第"+q+"個元素定義為"+cd[i]+"。"); 
  }
  sz.close();
  
  //數(shù)組內(nèi)各元素已經(jīng)完成賦值,但是再用for循環(huán)遍歷一次
 System.out.print("數(shù)組內(nèi)元素全部完成賦值:");//繼續(xù)提示一下
 for (int i2 = 0; i2 < cd.length; i2++) {  
  if(i2 == cd.length-1) {
  System.out.print(cd[i2]+"。");
  }else {
  System.out.print(cd[i2]+"、");
  }
 }
 return;//方法結束,rentun;
 }
 
}

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關文章

  • spring-boot實現(xiàn)增加自定義filter(新)

    spring-boot實現(xiàn)增加自定義filter(新)

    本篇文章主要介紹了spring-boot實現(xiàn)增加自定義filter(新),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 關于Springboot+gateway整合依賴并處理依賴沖突問題

    關于Springboot+gateway整合依賴并處理依賴沖突問題

    這篇文章主要介紹了Springboot+gateway整合依賴并處理依賴沖突問題,給大家提到了spring boot版本和spring cloud版本,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • SpringBoot整合Shiro實現(xiàn)登錄認證的方法

    SpringBoot整合Shiro實現(xiàn)登錄認證的方法

    這篇文章主要介紹了SpringBoot整合Shiro實現(xiàn)登錄認證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • Spring?MVC基于注解的使用之JSON數(shù)據(jù)處理的方法

    Spring?MVC基于注解的使用之JSON數(shù)據(jù)處理的方法

    這篇文章主要介紹了Spring?MVC基于注解的使用JSON數(shù)據(jù)處理,json是一種輕量級的數(shù)據(jù)交換格式,是一種理想的數(shù)據(jù)交互語言,它易于閱讀和編寫,同時也易于機器解析和生成,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • RPC框架之Thrift的入門教程

    RPC框架之Thrift的入門教程

    Thrift是一個跨語言的服務部署框架,主要用于各個服務之間的RPC通信,支持跨語言,下面小編就來和大家講講Thrift框架的具體使用,希望對大家有所幫助
    2023-10-10
  • SpringBoot2 實現(xiàn)JPA分頁和排序分頁的案例

    SpringBoot2 實現(xiàn)JPA分頁和排序分頁的案例

    這篇文章主要介紹了SpringBoot2 實現(xiàn)JPA分頁和排序分頁的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • java swing實現(xiàn)簡單的五子棋游戲

    java swing實現(xiàn)簡單的五子棋游戲

    這篇文章主要為大家詳細介紹了java swing實現(xiàn)簡單的五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Springboot訪問html頁面步驟解析

    Springboot訪問html頁面步驟解析

    這篇文章主要介紹了Springboot訪問html頁面過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • 最新版Eclipse安裝、配置圖文教程詳解

    最新版Eclipse安裝、配置圖文教程詳解

    這篇文章主要介紹了新版Eclipse安裝、配置,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java中split根據(jù)"."分割字符串問題舉例

    Java中split根據(jù)"."分割字符串問題舉例

    split表達式其實就是一個正則表達式,* | . ^ 等符號在正則表達式中屬于一種有特殊含義的字符,下面這篇文章主要給大家介紹了關于Java中split根據(jù)“.“分割字符串問題的相關資料,需要的朋友可以參考下
    2022-10-10

最新評論