电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java自定義長度可變數組的操作

瀏覽:3日期:2022-08-17 11:13:24

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

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

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

public class MyList<E> { private int rongliang;//容量 private int zengliang;//增量 private int num;//數量 //定義一個原數組 //Object類包含所有的類型,所以定義數組是用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中實現在數組中添加數據,要考慮到數組中的數據數量小于數組長度時,可以直接在數組為null處添加數據,但當數組的數量大于等于數組長度時,要先重新定義一個數組,長度是原數組加增量,然后再添加數據

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

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

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

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

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

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

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

將指定下標處的數據改為指定的數據

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

最后在寫個獲取數組中數據的個數,而不是數組的長度

public int size(){ return num; }

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

public class test { public static void main(String[] args) { //創建一個MyList對象 // 在創建對象時明確類型 MyList<String> list = new MyList<String>(); //添加數據 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'); //遍歷數組 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('數據個數為:'+n); System.out.println('**********************************************'); //修改指定位置的數據 list.modify(1, 'QQ'); //遍歷數組 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('數據個數為:'+m); System.out.println('**********************************************'); //刪除指定位置的數據 list.delete(2); //遍歷數組 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('數據個數為:'+k); System.out.println('**********************************************'); //在指定位置插入指定的數據 list.insert(3, 'zr'); list.insert(3, 'qi'); //遍歷數組 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('數據個數為:'+h); System.out.println('**********************************************'); } }

最終數組的結果為:

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

補充:在Java中創建一個自定義長度的數組并輸入每個元素

用到知識點:數組、方法、Scanner、for循環。

作業:

package Array;import java.util.Scanner;public class InputArray {public static void main(String[] args) {shuzu();//方法調用 } //方法定義 public static void shuzu() { //將輸入的數字作為數組的長度 Scanner sz = new Scanner(System.in); System.out.println('請輸入數組長度:');//提示可以操作 int[] cd = new int[sz.nextInt()];//數組初始化完成 System.out.println('當前數組長度定義為:'+cd.length);//再提示一下結果 //用for循環為每一個元素賦值 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(); //數組內各元素已經完成賦值,但是再用for循環遍歷一次 System.out.print('數組內元素全部完成賦值:');//繼續提示一下 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; } }

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Java
相關文章:
主站蜘蛛池模板: 美缝剂_美缝剂厂家_美缝剂加盟-地老板高端瓷砖美缝剂 | 酒水灌装机-白酒灌装机-酒精果酒酱油醋灌装设备_青州惠联灌装机械 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 品牌设计_VI设计_电影海报设计_包装设计_LOGO设计-Bacross新越品牌顾问 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 上海网站建设-上海网站制作-上海网站设计-上海做网站公司-咏熠软件 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛婚外情取证-青岛王军侦探事务所 | 科客,主见不成见| 标策网-专注公司商业知识服务、助力企业发展 | 电动不锈钢套筒阀-球面偏置气动钟阀-三通换向阀止回阀-永嘉鸿宇阀门有限公司 | 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 卫生人才网-中国专业的医疗卫生医学人才网招聘网站! | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 马尔表面粗糙度仪-MAHR-T500Hommel-Mitutoyo粗糙度仪-笃挚仪器 | 企业VI设计_LOGO设计公司_品牌商标设计_【北京美研】 | 拉力机-拉力试验机-万能试验机-电子拉力机-拉伸试验机-剥离强度试验机-苏州皖仪实验仪器有限公司 | 防火阀、排烟防火阀、电动防火阀产品生产销售商-德州凯亿空调设备有限公司 | 空气能采暖,热泵烘干机,空气源热水机组|设备|厂家,东莞高温热泵_正旭新能源 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 杭州画室_十大画室_白墙画室_杭州美术培训_国美附中培训_附中考前培训_升学率高的画室_美术中考集训美术高考集训基地 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 餐饮加盟网_特色餐饮连锁加盟店-餐饮加盟官网 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 搅拌磨|搅拌球磨机|循环磨|循环球磨机-无锡市少宏粉体科技有限公司 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | CNC机加工-数控加工-精密零件加工-ISO认证厂家-鑫创盟 | 鲸鱼视觉 -数字展厅多媒体互动展示制作公司 | 福建珂朗雅装饰材料有限公司「官方网站」 | 金刚网,金刚网窗纱,不锈钢网,金刚网厂家- 河北萨邦丝网制品有限公司 | 航空铝型材,7系铝型材挤压,硬质阳*氧化-余润铝制品 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 二维运动混料机,加热型混料机,干粉混料机-南京腾阳干燥设备厂 | 合肥展厅设计-安徽展台设计-合肥展览公司-安徽奥美展览工程有限公司 | 万博士范文网-您身边的范文参考网站Vanbs.com |