`
百合不是茶
  • 浏览: 344214 次
社区版块
存档分类
最新评论

动态数组的存储速度比较 集合框架

 
阅读更多

集合框架:

自定义数据结构(增删改查等)

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+1
			Object[] 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()) {
			// 定义新数组,长度比原数组+1
			Object[] 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()) {
			// 定义新数组,长度是原始数组长度-1
			Object[] 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等

分享到:
评论

相关推荐

    数组、集合、列表与数据表的查找速度比较

    基于多条记录有多种存储方法,而我们在选择使用哪种方法时考虑最多的还是其执行哪种方法的执行速度比较快,本人特编写了此程序,用于对比四种最常用的方法(数组、集合、列表、数据表)的执行速度。 又因为列表与...

    Java集合框架.ppt

    集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中

    Java集合框架List接口.pdf

    Java集合框架中的List接口是一种有序的集合,它可以存储重复的元素。它是Collection接口的子接口,提供了一系列可以对列表进行操作的方法,如添加、插入、删除、获取元素等。List接口还可以通过索引访问元素,类似于...

    Java集合框架常见面试题.pdf

    剖析⾯试最常⻅问题之 Java 集合框架 集合概述 Java 集合概览 从下图可以看出,在 Java 中除了以 Map 结尾的类之外, 其他类都实现了 Collection 接⼝。 并且,以 Map 结尾的类都实现了 Map 接⼝。 说说 List,Set,...

    Java 集合框架介绍.ppt

    “集合框架”(Collections Framework)提供了一组精心设计的接口和类,它们以单个单元即集合的形式存储和操作数据组 。对于计算机科学数据结构课程中学到的许多抽象数据类型如映射(map)、集(set)、列表(list)...

    深入理解Java:10个示例展示核心概念和用法涵盖了类和对象、继承和多态、接口和实现、异常处理、集合框架、文件操作、多线程、输入

    5. 集合框架:介绍了使用ArrayList作为动态数组来存储和遍历数据的示例。 6. 文件操作:展示了读取文件内容并打印到控制台的文件操作示例。 7. 多线程:演示了使用多线程并发执行任务的示例。 8. 输入输出:展示了...

    Java集合框架的一个扑克牌小程序

    * Game 类 * 功能:整个游戏:开始游戏 -&gt; 初始牌 -&gt; 洗牌 -&gt; 发牌 -&gt; 排序 -&gt; 比较大小 -&gt; 游戏结果 * 游戏说明: * 1.创建一副扑克牌,不考虑大小王 ... * 方法: public People() //初始化存储牌的List集合; *

    实验05 Java集合.doc

    掌握集合的概念、体系结构、分类及使用场景 2)了解Set接口及主要实现类(HashSet、TreeSet) 3)了解List接口及主要实现类...2、为什么使用集合框架,而尽可能少用数组作为存储结构? 3、如何使用TreeSet实现第一题?

    面试官都扯不过你系列之集合框架类总结

    文章目录前言框架概述说一说集合类有什么特点及与数组的比较说一说集合类之间的主要关系List、Map、Set 三个接口,存取元素时,各有什么特点?集合类全息图哪些集合类是线程安全的?Java集合的快速失败机制 “fail-...

    Java Collection集合的简单介绍与运用

    2 集合框架 集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map,这里主要记录一下Collection集合。 Collection:单列集合类的根接口,用于存储一系列符合某种规则的...

    JAVA–集合

    集合框架 集合按照其存储结构可以分为两大类,单列集合java.util.Collection、双列集合java.util.Map 一、Collection Collection集合框架的体系 Collection常用功能 1.public boolean add(E e):把给定的对象添加到...

    Java集合总结

    一、集合框架 集合:集合可以看做是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。集合里存存放的元素都是引用数据类型。 数组与集合的区别:(1)...

    springmybatis

    MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan ...

    Java集合浅层理解

    集合 层次一:针对不同特点的数据,能够选择对应... |—–List:存储有序的、可以重复的数据 : 替换数组,”动态数组”  |—–ArrayList/LinkedList/Vector  |—–Set:存储无序的、不可重复的数据: 高中的集合  

    java8集合源码分析-CollectionDemo:自己复习集合框架时候的例子

    内部使用的是一个HashMap集合key值当做我们存储的对象,value值是一个固定的Object对象 保证唯一性:元素hashCode和equals方法。hashCode方法相同,判断equals方法 ---LinkedHashSet: 有序,是HashSet的子类 2....

    Java ArrayList的不同排序方法

    ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减。你可能已经使用过 ArrayList,因此我将略过基础部分。如果你对 ArrayList 还不...

    Java的第六周学习报告

    集合框架被设计成要满足以下几个目标。 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。 对一个集合的...

    安卓毕业设计app项目源码6-android-interviewer:安卓面试官

    本题侧重与对android集合框架的认识程度 这里进行解析 java集合框架Collection collection是集合框架的根,定义了集合操作的通用行为 继他之后存在四个子接口 list,map,set,queue list是有序collection接口 实现: ...

Global site tag (gtag.js) - Google Analytics