java编程题之自定义动态数组
来源:互联网 发布:c语言中布尔型数据 编辑:程序博客网 时间:2024/06/14 09:59
一、通过数组模拟编写动态数组List的操作(不用面向对象的思想)
- 运用方法的返回和重创建进行动态数组的实现(Arrays.java)
package com.ucai.task6;/** * 数据模拟类,不通过面向对象的思想 * @author facebook * */public class Arrays { /** * 向模拟的动态数组中添加数据,初始化可有值,也可为null或者传入长度为0的数组, * 循环添加数据,并打印添加的结果 */ public static void testArrays(int start,int end) { int[] arrays = null; for (; start < end; start++) { arrays = arrays(arrays, start); } for (int i=0;i<arrays.length;i++) { if(arrays[i]%500==0){ System.out.println("\n"); } System.out.print(arrays[i] + " "); } } /** * 用java模拟动态数组,模拟ArrayList的add方法,实现自增的效果 * 具体实现动态数组的操作 * * 操作:1.判断传入数组的长度 * 如果传入数组是空数组,那么就创建一个长度为1的数组,然后再将传入的具体数据存入数组中 * 如果传入数据不是空数据,需要判断数组是不是全部都存满 * 那么就需要对传入的数据进行一次遍历,然后统计有多少个 * * @param itns 需要添加数据的数组 * @param itn 需要被添加进数组的具体数据 * @return */ public static int[] arrays(int[] itns, int itn) { int[] array = null; if (itns==null||itns.length == 0) { array = new int[1]; array[0] = itn; } else { //用于统计传入的数组中有多少个含有不是0的数值,并且用于创建存取传入数组不是0数组的长度 int count = 0; //创建一个存储传入数组中不是0的数组 int[] itns1 = null; //判断传入数组中的数据有哪些含有数据,如果含有那么就统计一次,得到需要创建数组的长度 for (int it : itns) { if (it != 0) { count++; } } //创建存储传入数组中不是0的数据的数组 itns1 = new int[count]; //定义数组的下标, int k=0; //将被操作的数组中不是0的数据全部存在新数组中,以便于后边数据的数据叠加 for(int i=0;i<itns.length;i++){ if(itns[i]!=0){ itns1[k++]=itns[i]; } } //创建一个存储操作数组中不是0数据数据的array数组,用于数据叠加,并且长度是元数据长度+1 array = new int[k + 1]; //将不是0的数据全部存入array数组中 for (int i = 0; i < k; i++) { array[i] = itns1[i]; } //存入传入的数据,整个数组添加完成 array[array.length - 1] = itn; } return array; } public static void main(String[] args) { //想数组中存入一万个数据,并打印出所有的数据 testArrays(1,10000); }}
二、通过面向对象模拟List集合,底层还是使用数组
- 一个简单的动态集合的编写,像List中的什么迭代器,还是其他的方法,没有做,只做了一个add、get、remove方法(Array.java)
package com.ucai.task6;public class Array<T> { /** * 定义一个自定义类型的数组,外部传入什么类型的数据,数据就是什么类型 */ private T[]ts; /** * 初始化一个长度为0的数组 */ @SuppressWarnings("unchecked") public Array(){ts = (T[])new Object[0];} /** * 获取数组中某一个元素的值,根据数组角标 * @param arg * @return */ public T get(int arg) { return ts[arg]; } /** * 获取数组的长度 * @return */ public int size(){ return ts.length; } /** * 向数组中添加一个元素 * @param t */ @SuppressWarnings("unchecked") public void add(T t){ T[] array = (T[])new Object[this.size()+1]; for(int i=0;i<this.size();i++){ array[i]=this.ts[i]; } array[this.size()] = t; reset(array); } /** * 删除数组中的某一个元素 * @param obj * @return */ @SuppressWarnings("unchecked") public boolean remove(Object obj){ if(this.ts == null||this.size()==0) return false; T[] array = (T[])new Object[this.size()-1]; for(int i=0,corner=0;i<this.size();i++){ if(!obj.equals(this.ts[i])||obj!=this.ts[i]){ array[corner++] = this.ts[i]; } } reset(array); return true; } /** * 重置数组 */ private void reset(T[] array){ this.ts = null; this.ts = array; } public static void main(String[] args) { Array array = new Array(); array.add("kkk"); array.add(123); System.out.println(array.get(1)); }}
阅读全文
0 0
- java编程题之自定义动态数组
- Java动态编程之javassist
- Java编程之动态代理
- Java编程思想之数组
- Java编程思想之数组
- 自定义动态数组
- 自定义一个动态数组
- 自定义动态数组MyArrayList
- java之创建自定义类数组
- java笔记(7)--反射之动态数组
- java自定义动态数组-控制台购书系统-购物车实现
- Java程序员学习C++之数组和动态数组
- JAVA AOP编程之动态代理技术
- 编程之美 2.18:数组分割 (涉及 动态规划)
- 编程之美2.18--数组分割(动态规划问题)
- 黑马程序员--Java编程之数组篇
- Java编程之数组逆序输出
- c++自定义动态数组模板
- 关于Delphi使用Rewrite()报Invalid FileName错的问题
- docker离线安装
- [leetcode: Python]485. Max Consecutive Ones
- enq: HW
- 宁波oj1763(精度处理问题以及double运算漏洞)
- java编程题之自定义动态数组
- Android应用内多进程分析和研究
- vue.js动态数据绑定学习
- 网关的作用(两个内网主机通信原理)
- (五)写第一个Fiori应用
- linux最大文件句柄数量总结
- 最大子数组 hdu 1003 1231
- log4j2的配置详情
- 使用Flexible实现手淘H5页面的终端适配