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

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

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

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

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

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

public class MyList<E> {
 private int rongliang;//容量
 private int zengliang;//增量
 private int num;//數(shù)量
 
 //定義一個(gè)原數(shù)組
 //Object類包含所有的類型,所以定義數(shù)組是用Object類
 private Object[] src;
 
 //三個(gè)不同的構(gòu)造方法
 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中實(shí)現(xiàn)在數(shù)組中添加數(shù)據(jù),要考慮到數(shù)組中的數(shù)據(jù)數(shù)量小于數(shù)組長(zhǎng)度時(shí),可以直接在數(shù)組為null處添加數(shù)據(jù),但當(dāng)數(shù)組的數(shù)量大于等于數(shù)組長(zhǎng)度時(shí),要先重新定義一個(gè)數(shù)組,長(zhǎng)度是原數(shù)組加增量,然后再添加數(shù)據(jù)

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

取出指定下標(biāo)的數(shù)據(jù),因?yàn)閭魅氲氖窍聵?biāo)的參數(shù),所以要判斷數(shù)組的下標(biāo)是否越界,拋出異常

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

修改指定下標(biāo)的數(shù)據(jù),因?yàn)閭魅氲氖窍聵?biāo)的參數(shù),所以要判斷數(shù)組的下標(biāo)是否越界,拋出異常

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

刪除指定下標(biāo)的數(shù)據(jù),當(dāng)數(shù)組中null值的長(zhǎng)度大于等于增量時(shí),要將數(shù)組的容量減小,防止浪費(fèi)

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

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

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

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

public int size(){
   return num;
 }

寫個(gè)測(cè)試類,來(lái)測(cè)試這個(gè)長(zhǎng)度可變的數(shù)組是否可行

public class test {
 
 public static void main(String[] args) {
 //創(chuàng)建一個(gè)MyList對(duì)象
 // 在創(chuàng)建對(duì)象時(shí)明確類型
 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ù)個(gè)數(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ù)個(gè)數(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ù)個(gè)數(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ù)個(gè)數(shù)為:"+h);
 System.out.println("**********************************************");
 }
 
}

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

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

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

用到知識(shí)點(diǎn):數(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ù)組的長(zhǎng)度
 Scanner sz = new Scanner(System.in);
 System.out.println("請(qǐng)輸入數(shù)組長(zhǎng)度:");//提示可以操作
 int[] cd = new int[sz.nextInt()];//數(shù)組初始化完成
 System.out.println("當(dāng)前數(shù)組長(zhǎng)度定義為:"+cd.length);//再提示一下結(jié)果
 
 //用for循環(huán)為每一個(gè)元素賦值
 for (int i = 0; i < cd.length; i++) {
  int q = i+1;//這里q用作提示,避免提示出第0個(gè)元素。
  System.out.println("請(qǐng)輸入第"+q+"個(gè)元素的值:");
  cd [i] = sz.nextInt();
  System.out.println("第"+q+"個(gè)元素定義為"+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;//方法結(jié)束,rentun;
 }
 
}

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

相關(guān)文章

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

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

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

    關(guān)于Springboot+gateway整合依賴并處理依賴沖突問(wèn)題

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

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

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

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

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

    RPC框架之Thrift的入門教程

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

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

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

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

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

    Springboot訪問(wèn)html頁(yè)面步驟解析

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

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

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

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

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

最新評(píng)論