动态数组的存储速度比较 集合框架
编程技术  /  houtizong 发布于 3年前   95
集合框架:
自定义数据结构(增删改查等)
package 数组;/** * 创建动态数组 * @author 百合 * */public class ArrayDemo{//定义一个数组来存放数据String[] src = new String[0];/** * 增加元素加入容器 * @param s要加入容器的个数 */public void add(String s){//创建一个新的数组,长度为src+1;String[] dest = new String[src.length+1];//将新加入的数组放在数组的最后一位dest[dest.length-1] = s;//将src数组的值copy到dest数组里面for(int i = 0;i<src.length;i++){dest[i] = src[i];}//将src指向新数组src = dest;}/** * 获取元素的地址 * @param index * @return */public String get(int index){return src[index];}/** * 修改指定位置的元素 * @param index修改的元素位置 * @param s修改后的新元素 */public void update(int index,String s){if(index >=0 && index<size()){src[index]= s;}else{System.out.println("指定的下标超出范围");}} /** * 将指定的元素插入到指定的位置 */public void insert(int index,String s){if(index>=0 && index <size()){String[] dest = new String[src.length+1];//将插入的数组放到指定的位置dest[index] = s;for(int i = 0;i < index;i++){dest[i] = src[i];}for(int i = index;i<src.length;i++){dest[i+1] = src[i];}//将src指新数组src = dest;}else{System.out.println("指定的下标超出范围");}}/** * 删除指定位置的元素 * @param inde下标的元素 */public void dalete(int index){String[] dest = new String[src.length-1];for(int i = 0;i<index;i++){dest[i] = src[i];}for(int i = index +1;i<src.length;i++ ){dest[i-1] = src[i];}src = dest;}/** * * @return 返回得到容器的元素的个数 * */public int size(){return src.length;}}
//测试ArrayDemo数组
//泛型的类类型,可以调用方法
package 数组;public class ArrayTest {public static void main(String[] args) {// TODO Auto-generated method stub//获得系统时间long t1 = System.currentTimeMillis();System.out.println(t1);ArrayDemo am = new ArrayDemo();am.add("元素1");am.add("元素2");am.add("元素3");am.add("元素4");am.add("元素5");//am.dalete(4);am.insert(0,"元素六");long t2 = System.currentTimeMillis();System.out.println(t2);//遍历for(int i = 0;i<am.size();i++){String num = am.get(i);System.out.println(num);System.out.println(Math.abs(t2-t1));}System.out.println(Math.abs(t2-t1));}}
//修改后的数组,使用泛型可以存储任意的类型
/** * 动态数组,用来装任意类型的动态数组 * * @author 百合 * */public class ArrayQueue<E> {private int len = 0;// 长度private int initContiner;// 初始容量private int rate;// 增长比率// 定义一个用来存放数据的数组// 初始长度为0,表示没有装任何数据Object[] src;public ArrayQueue() {this.initContiner = 10;this.rate = 10;src = new Object[initContiner];}// 创建容器对象的时候指定容量和增长比率public ArrayQueue(int initContiner, int rate) {this.initContiner = initContiner;this.rate = rate;src = new Object[initContiner];}/** * 将指定的元素加入容器 * * @param s * 要加入到容器中的元素 */public void add(E s) {// 如果长度小于容量,就将元素放到数组第一个为null的位置if (len >= src.length) {// 创建新数组// 定义一个新数组,用来装数据,长度比src+1Object[] dest = new Object[src.length + rate];// 将源数组中的数据按照下标顺序拷贝到新数组System.arraycopy(src, 0, dest, 0, len);src = dest;}src[len] = s;len++;}/** * 获取指定下标位置的元素 * * @param index * 要获取的元素的下标 * @return 返回获取到的元素 */public E get(int index) {return (E) src[index];}/** * 修改指定位置元素的值 * * @param index要修改的元素位置 * @param s * 修改后的新元素 */public void update(int index, E s) {if (index >= 0 && index < size()) {src[index] = s;} else {System.out.println("指定的下标超出范围!!!");}}/** * 将指定元素插入到指定位置 * * @param index * 要插入元素的位置 * @param s * 要插入的新元素 */public void insert(int index, E s) {if (index >= 0 && index < size()) {// 定义新数组,长度比原数组+1Object[] dest = new Object[src.length + 1];// 将新元素放到新数组的指定位置dest[index] = s;// 将源数组中下标<index,拷贝到新数组相同的下标位置for (int i = 0; i < index; i++) {dest[i] = src[i];}// 将源数组中其他下标的元素拷贝到新数组下标+1的位置for (int i = index; i < src.length; i++) {dest[i + 1] = src[i];}// 将src指向新数组src = dest;} else {System.out.println("指定的下标超出范围!!!");}}/** * 删除指定位置的元素 * * @param index * 要删除的元素的下标 */public void delete(int index) {if (index >= 0 && index < size()) {// 定义新数组,长度是原始数组长度-1Object[] dest = new Object[src.length - 1];// 如果下标<index,则按下标位置拷贝for (int i = 0; i < index; i++) {dest[i] = src[i];}// index位置的值丢掉不需要拷贝// >index的下标位置拷贝到新数组下标-1的位置for (int i = index + 1; i < src.length; i++) {dest[i - 1] = src[i];}// 将src指向新数组src = dest;} else {System.out.println("指定的下标超出范围!!!");}}/** * 获得容器中元素个数的方法 容器中不为null的元素个数 * * @return 返回元素的个数 */public int size() {return len;}}//测试public class MainDemo {public static void main(String[] args) {// 在创建容器对象的时候,将泛型具体化ArrayQueue<String> queue = new ArrayQueue<String>();//获得系统时间long t1 = System.currentTimeMillis();for (int i = 0; i < 10; i++) {queue.add("元素" + i);}queue.add("新元素");long t2 = System.currentTimeMillis();for (int i = 0; i < queue.size(); i++) {String s = queue.get(i);System.out.println(s);}System.out.println(Math.abs(t2-t1));}}
//上述的两个是对数据的存取速度进行比较,第二种的速度比第一种的开辟速度快很多
java的API中有一系列的方法可以供调用,例如:list set map等
请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成
网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];
文章归档
文章标签
友情链接