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

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

Java 自定義動態數組方式

瀏覽:33日期:2022-08-15 10:09:31
Java自定義動態數組1、靜態數組向動態數組轉變

(1)靜態數組,數組空間固定長度

Java 自定義動態數組方式

這個數組空間總長為4,如果此時新插入一個數據就會報數組空間不足

(2)靜態數組如何轉變成動態數組

Java 自定義動態數組方式

第一步:創建一個空間是data數組兩倍的newData數組(擴容);

第二步:把data數組中的元素全部賦值到newData數組;

2、數組擴容程序

// 數組擴容private void resize(int newCapacity){ E[] newData = (E[]) new Object[newCapacity]; for (int i = 0; i < size; i++) { newData[i] = data[i]; } data = newData;}

數組添加元素:數組空間不夠就會擴容(原來空間2倍)

// 數組指定位置添加元素 public void add(int index, E e) {// if (size == data.length)// throw new IllegalArgumentException('Add failed.Array is full.'); if (index < 0 || index > size) throw new IllegalArgumentException('Add failed. Require index >= 0 and index <= size'); if (size == data.length) resize(2 * data.length); for (int i = size - 1; i >= index; i--) data[i + 1] = data[i]; data[index] = e; size++; }

數組刪除元素:數組空間空閑太大就會縮容(原來空間的1/2)

// 從數組中刪除index位置的元素,返回刪除的元素public E remove(int index) { if (index < 0 || index >= size) { throw new IllegalArgumentException('Remove failed.Index is illegal'); } E ret = data[index]; for (int i = index + 1; i < size; i++) { data[i - 1] = data[i]; } size--; // loitering objects != memory leak 手動釋放內存空間 data[size] = null; if(size == data.length / 2) { resize(data.length / 2); } return ret;}3、數組整體代碼

public class Array<E> { // 定義數組變量,data.length表示數組容量capacity private E[] data; // 定義數組中存放數據大小 private int size; // 有參構造方法,傳入數組的容量capacity構造動態數組 public Array(int capacity) { data = (E[])new Object[capacity]; size = 0; } // 無參構造方法,默認初始容量為capacity=10 public Array() { this(10); } // 獲取數組中元素個數 public int getSize() { return size; } // 獲取數組的容量 public int getCapacity() { return data.length; } // 判斷數組是否為空 public boolean isEmpty() { return size == 0; }/* // 在數組末尾添加元素 public void addLast(E e) { if (size == data.length) throw new IllegalArgumentException('AddLast failed.Array is full.'); data[size] = e; size++; }*/ // 在數組末尾添加元素(復用add方法) public void addLast(E e) { add(size, e); } // 在數組頭部添加元素(復用add方法) public void addFirst(E e) { add(0, e); } // 數組指定位置添加元素 public void add(int index, E e) {// if (size == data.length)// throw new IllegalArgumentException('Add failed.Array is full.'); if (index < 0 || index > size) throw new IllegalArgumentException('Add failed. Require index >= 0 and index <= size'); if (size == data.length) resize(2 * data.length); for (int i = size - 1; i >= index; i--) data[i + 1] = data[i]; data[index] = e; size++; } // 獲取index索引位置的元素 public E get(int index) { if (index < 0) { throw new IllegalArgumentException('Get failed.Index is illegal.'); } return data[index]; } // 修改index索引位置的元素 public void set(int index, E e) { if (index < 0 || index >= size) { throw new IllegalArgumentException('Set failed.Index is illegal.'); } data[index] = e; } // 查找數組中是否存在元素e public boolean contains(E e) { for (int i = 0; i < size; i++) { if (data[i] == e) {return true; } } return false; } // 查找數組中元素e所在的索引,如果不存在元素e,則返回-1 public int find(E e) { for (int i = 0; i < size; i++) { if (data[i] == e) {return i; } } return -1; } // 從數組中刪除index位置的元素,返回刪除的元素 public E remove(int index) { if (index < 0 || index >= size) { throw new IllegalArgumentException('Remove failed.Index is illegal'); } E ret = data[index]; for (int i = index + 1; i < size; i++) { data[i - 1] = data[i]; } size--; // loitering objects != memory leak 手動釋放內存空間 data[size] = null; if(size == data.length / 2) { resize(data.length / 2); } return ret; } // 刪除數組第一個元素,返回刪除的元素 public E removeFirst() { return remove(0); } // 刪除數組最后一個元素 public E removeLast() { return remove(size - 1); } // 刪除數組中指定元素e public void removeElement(E e) { int index = find(e); if (index != -1) { remove(index); } } // 數組擴容 private void resize(int newCapacity){ E[] newData = (E[]) new Object[newCapacity]; for (int i = 0; i < size; i++) { newData[i] = data[i]; } data = newData; } // 重寫父類toString()方法 @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(String.format('Array: size = %d , capacity = %dn', size, data.length)); sb.append(’[’); for (int i = 0; i < size; i++) { sb.append(data[i]); if (i != size - 1) {sb.append(’,’); } } sb.append(’]’); return sb.toString(); }}4、數組測試代碼

public class ArrayTest { public static void main(String[] args) { // 測試toString()方法 Array<Integer> arr = new Array(10); for (int i = 0; i < 10; i++) { // 測試addLast(int e)方法 arr.addLast(i); } System.out.println('添加數組元素:'); System.out.println(arr); // 測試add(int index, int e)方法 arr.add(1, 200); System.out.println('在數組指定索引位置插入元素e:'); System.out.println(arr); // 測試addFirst(int e)方法 arr.addFirst(-10); System.out.println('在數組頭部位置插入元素e:'); System.out.println(arr); }}

測試結果如下所示:初始化數組空間大小為10,第一次插入10個元素到數組之后,然后再添加一個元素,此時數組會擴容為原來空間的兩倍。

添加數組元素:

Array: size = 10 , capacity = 10[0,1,2,3,4,5,6,7,8,9]

在數組指定索引位置插入元素e:

Array: size = 11 , capacity = 20[0,200,1,2,3,4,5,6,7,8,9]

在數組頭部位置插入元素e:

Array: size = 12 , capacity = 20

補充:Java靜態數組和動態數組的定義方式

數組的定義方式靜態:

//簡化語法常用 定義和初始化同步完成int [] a = {5,2,6,4,10};動態:

//數組的定義和初始化同時完成,使用動態初始化語法int[] prices = new int[5];

補充:

//初始化數組時元素的類型是定義數組時元素類型的子類Object[] books = new String[4];

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

標簽: Java
相關文章:
主站蜘蛛池模板: 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 清水混凝土修复_混凝土色差修复剂_混凝土色差调整剂_清水混凝土色差修复_河南天工 | POS机官网 - 拉卡拉POS机免费办理|官网在线申请入口 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 气密性检测仪_气密性检测设备_防水测试仪_密封测试仪-岳信仪器 | 台湾HIWIN上银直线模组|导轨滑块|TBI滚珠丝杆丝杠-深圳汉工 | 定坤静电科技静电消除器厂家-除静电设备 | 郑州水质检测中心_井水检测_河南废气检测_河南中环嘉创检测 | 骨灰存放架|骨灰盒寄存架|骨灰架厂家|智慧殡葬|公墓陵园管理系统|网上祭奠|告别厅智能化-厦门慈愿科技 | 安徽泰科检测科技有限公司【官方网站】 | 山东氧化铁红,山东铁红-淄博科瑞化工有限公司 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 喷砂机厂家_自动除锈抛丸机价格-成都泰盛吉自动化喷砂设备 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 低合金板|安阳低合金板|河南低合金板|高强度板|桥梁板_安阳润兴 北京租车牌|京牌指标租赁|小客车指标出租 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 耐驰泵阀管件制造-耐驰泵阀科技(天津)有限公司 | 全自动定氮仪-半自动凯氏定氮仪厂家-祎鸿仪器 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 即用型透析袋,透析袋夹子,药敏纸片,L型涂布棒-上海桥星贸易有限公司 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | 济宁工业提升门|济宁电动防火门|济宁快速堆积门-济宁市统一电动门有限公司 | 哲力实业_专注汽车涂料汽车漆研发生产_汽车漆|修补油漆品牌厂家 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 南京泽朗生物科技有限公司 | 隐形纱窗|防护纱窗|金刚网防盗纱窗|韦柏纱窗|上海青木装潢制品有限公司|纱窗国标起草单位 | 颗粒机,颗粒机组,木屑颗粒机-济南劲能机械有限公司 | 武汉森源蓝天环境科技工程有限公司-为环境污染治理提供协同解决方案 |