最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

我們都知道數(shù)組是線(xiàn)性的、類(lèi)型固定、內(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ù)組放滿(mǎn)時(shí),一次增加一定的長(zhǎng)度,這樣 節(jié)省了開(kāi)辟空間的時(shí)間

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

public class MyList<E> {
 private int rongliang;//容量
 private int zengliang;//增量
 private int num;//數(shù)量
 
 //定義一個(gè)原數(shù)組
 //Object類(lèi)包含所有的類(lèi)型,所以定義數(shù)組是用Object類(lèi)
 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類(lèi)型
 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++;
 }

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

public int size(){
   return num;
 }

寫(xiě)個(gè)測(cè)試類(lèi),來(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í)明確類(lèi)型
 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)文章

  • resultMap標(biāo)簽中里的collection標(biāo)簽詳解

    resultMap標(biāo)簽中里的collection標(biāo)簽詳解

    這篇文章主要介紹了resultMap標(biāo)簽中里的collection標(biāo)簽,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Mybatis-Plus多表關(guān)聯(lián)查詢(xún)的使用案例解析

    Mybatis-Plus多表關(guān)聯(lián)查詢(xún)的使用案例解析

    這篇文章主要介紹了Mybatis-Plus多表關(guān)聯(lián)查詢(xún)的使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • java實(shí)現(xiàn)收藏功能

    java實(shí)現(xiàn)收藏功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)收藏功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • HttpServletResponse亂碼問(wèn)題_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    HttpServletResponse亂碼問(wèn)題_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了HttpServletResponse亂碼問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • SpringBoot如何使用p6spy監(jiān)控?cái)?shù)據(jù)庫(kù)

    SpringBoot如何使用p6spy監(jiān)控?cái)?shù)據(jù)庫(kù)

    這篇文章主要介紹了SpringBoot如何使用p6spy監(jiān)控?cái)?shù)據(jù)庫(kù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中如何靈活獲取excel中的數(shù)據(jù)

    Java中如何靈活獲取excel中的數(shù)據(jù)

    這篇文章主要給大家介紹了關(guān)于Java中如何靈活獲取excel中的數(shù)據(jù),在日常工作中我們常常會(huì)進(jìn)行文件讀寫(xiě)操作,除去我們最常用的純文本文件讀寫(xiě),更多時(shí)候我們需要對(duì)Excel中的數(shù)據(jù)進(jìn)行讀取操作,需要的朋友可以參考下
    2023-07-07
  • SpringBoot2零基礎(chǔ)到精通之配置文件與web開(kāi)發(fā)

    SpringBoot2零基礎(chǔ)到精通之配置文件與web開(kāi)發(fā)

    SpringBoot是一種整合Spring技術(shù)棧的方式(或者說(shuō)是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開(kāi)發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)配置文件以及web相關(guān)的開(kāi)發(fā)
    2022-03-03
  • Java線(xiàn)程優(yōu)先級(jí)變量及功能

    Java線(xiàn)程優(yōu)先級(jí)變量及功能

    這篇文章主要介紹了Java線(xiàn)程優(yōu)先級(jí)變量及功能,關(guān)于優(yōu)先級(jí)的問(wèn)可能有兩個(gè)或更多線(xiàn)程被分配了相同的優(yōu)先級(jí),那么它們的執(zhí)行取決于操作系統(tǒng),更多相關(guān)介紹,需要的小伙伴可以參考一下
    2022-06-06
  • Java多線(xiàn)程Thread , Future , Callable , FutureTask的使用

    Java多線(xiàn)程Thread , Future , Callable ,

    本文主要介紹了Java多線(xiàn)程Thread , Future , Callable , FutureTask的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲(附源碼)

    Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲(附源碼)

    今天給大家?guī)?lái)的是小項(xiàng)目是 基于Java+Swing+IO流實(shí)現(xiàn) 的貪吃蛇大作戰(zhàn)小游戲。實(shí)現(xiàn)了界面可視化、基本的吃食物功能、死亡功能、移動(dòng)功能、積分功能,并額外實(shí)現(xiàn)了主動(dòng)加速和鼓勵(lì)機(jī)制,需要的可以參考一下
    2022-07-07

最新評(píng)論

呼玛县| 武隆县| 丹阳市| 会同县| 渑池县| 射洪县| 雷州市| 仁寿县| 雷州市| 浙江省| 汉沽区| 滦平县| 华坪县| 陕西省| 金平| 康平县| 达孜县| 揭西县| 阳原县| 苍梧县| 永和县| 成安县| 咸丰县| 从江县| 牡丹江市| 巴东县| 罗甸县| 开平市| 福泉市| 桑植县| 双城市| 新余市| 鹤岗市| 扬中市| 松潘县| 灵璧县| 恭城| 裕民县| 龙州县| 化隆| 平乐县|