`
杨杨和花花
  • 浏览: 21728 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

自定义的ArrayList队列实现方法

 
阅读更多

       最近参加金山网络的一次笔试,给我感觉是基础需要很扎实才行。其中就有一道题是关于自定义队列的。这个问题确实很常见,细心的人肯定第一时刻就去看ArrayList的源代码。下面我就给出其中几个方法的实现:

package 自定义队列;

import java.util.Arrays;

/**
 * 自己定义的一个队列,包括add,remove,clear,get,set,size等方法
 * @author Administrator
 *
 */
public class MyArrayList {
	private Object data[];
	private int size;
	
	public MyArrayList(){
		data=new Object[10];
	}
	public boolean add(Object obj){
		expandList(size+1);
		data[size++]=obj;
		return true;
	}
    
	public Object remove(int index){
		Rangcheck(index);
		Object obj=data[index];
		int num=size-index-1;
		if(num>0){
			System.arraycopy(data, index+1, data, index, num);
		}
		data[--size]=null;
		return obj;
	}
	
	public void clear(){
		for(int i=0;i<data.length;i++){
			data[i]=null;
		}
		size=0;
	}
	
	public Object get(int index){
		Rangcheck(index);
		return data[index];
	}
	
	public Object set(int index,Object obj){
		Rangcheck(index);
		Object oldobject=data[index];
		data[index]=obj;
		return oldobject;
	}
	
	public int size(){
		return size;
	}
	/**
	 * 扩容的方法
	 */
	public void  expandList(int addindex){
		int oldindex=data.length;
		if(addindex>oldindex){
			int newindex=(oldindex*3)/2+1;//此处是每次扩容的方式
			if(addindex>newindex)
				newindex=addindex;
			data=Arrays.copyOf(data, newindex);		
		}
	}
	
	public  void  Rangcheck(int index){
		if(index>=size){
			throw new IndexOutOfBoundsException(
		            "Index: "+index+", Size: "+size);
		}		
	}
	
	public static void main(String args[]){
		MyArrayList list=new MyArrayList();
		list.add("第一个元素");
		list.add("第二个元素");
		list.add("第三个元素");
		list.add("第四个元素");
		

		Object obj1=list.get(0);
		System.out.println("获取0位置的元素"+obj1);
		Object obj2=list.set(3, "插入的 元素");
		System.out.println("插入的元素为"+obj2);
		Object obj3=list.remove(3);
		System.out.println("移除3位置的元素"+obj3);
		System.out.println("当前的队列长度"+list.size);
		list.clear();
        System.out.println("当前的队列长度"+list.size());
		
	}
}

   对于每次扩容的大小,这个可以取一个最适合的值,还有位置异常的检测。

分享到:
评论

相关推荐

    用自定的ArrayList实现队列

    队列的核心为先进先出,即先入队的元素先出队,在之前手写的ArrayList中添加了删除方法实现了队列 /** * 在之前自定义的动态数组基础上完成队列,动态数组中要添加删除方法 * * @author 大刘 */ public class ...

    algorithm-samples:简单算法

    一些适合Java初学者的简单程序 计算机科学中的著名算法 ...自定义ArrayList,HashMap(以及更多)实现 克隆 定制比较器 一些常见的面试问题 反转数组或字符串 动态编程示例 角钟 交换整数 做出有效的句子 查找唯一编号

    史上最详细的【一线大厂面试题】详解及其答案

    ⑦js实现对数字自定义格式输出 ⑧js实战之全部替代一个子串为另一个子串 2、JavaSE目录 1、递归算法之输出某个目录下所有文件和子目录列表 2、泛型中extends和super的区别 3、内部类的理解 4、深入理解Java的反射...

    Java开发技术大全 电子版

    3.4方法的定义和实现116 3.4.1方法的声明117 3.4.2创建方法体与return语句117 3.4.3局部变量和成员变量的区别119 3.4.4方法的访问权限121 3.5方法的调用121 3.5.1方法调用的形式121 3.5.2方法调用的参数123 ...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    Java常见面试题208道.docx

    145.rabbitmq 怎么实现延迟消息队列? 146.rabbitmq 集群有什么用? 147.rabbitmq 节点的类型有哪些? 148.rabbitmq 集群搭建需要注意哪些问题? 149.rabbitmq 每个节点是其他节点的完整拷贝吗?为什么? 150....

    ASP.net技术内幕

    高级ASP.NET页面开发 &lt;br/&gt;第5章 用用户控件创建自定义控件 &lt;br/&gt;5.1 用用户控件包含标准内容 5.2 显露用户控件中的属性和方法 5.3 显露用户控件中的Web控件 5.4 显露用户控件中的事件 ...

    asp.net技术内幕(1)

    19.1.7 用XML文件进行用户身份验证 19.1.8 用数据库表进行用户身份验证 19.1.9 实现基于角色的身份验证 19.1.10 创建自定义的身份验证票据 19.1.11 表单身份验证和Web阵 19.2 使用Passport...

    asp.net技术内幕(2)

    19.1.7 用XML文件进行用户身份验证 19.1.8 用数据库表进行用户身份验证 19.1.9 实现基于角色的身份验证 19.1.10 创建自定义的身份验证票据 19.1.11 表单身份验证和Web阵 19.2 使用Passport...

    asp.net技术内幕(5)

    19.1.7 用XML文件进行用户身份验证 19.1.8 用数据库表进行用户身份验证 19.1.9 实现基于角色的身份验证 19.1.10 创建自定义的身份验证票据 19.1.11 表单身份验证和Web阵 19.2 使用Passport...

    asp.net技术内幕(4)

    19.1.7 用XML文件进行用户身份验证 19.1.8 用数据库表进行用户身份验证 19.1.9 实现基于角色的身份验证 19.1.10 创建自定义的身份验证票据 19.1.11 表单身份验证和Web阵 19.2 使用Passport...

    asp.net技术内幕(3)

    19.1.7 用XML文件进行用户身份验证 19.1.8 用数据库表进行用户身份验证 19.1.9 实现基于角色的身份验证 19.1.10 创建自定义的身份验证票据 19.1.11 表单身份验证和Web阵 19.2 使用Passport...

    Java JDK实例宝典

    7 自定义队列 4. 8 对List排序 4. 9 HashSet. LinkedHashSet和TreeSet 4. 10 列表. 集合与数组的互相转换 4. 11 HashMap. Hashtable. LinkedHashMap和TreeMap 4. 12 对Map排序 4. 13 ...

    JAVA 范例大全 光盘 资源

    实例19 数组实现顺序栈与队列 46 实例20 Arrays数组的应用 50 第5章 面向对象设计 54 实例21 图形面积与周长(抽象类) 54 实例22 宠物结婚(封装) 56 实例23 一个盒子(继承) 58 实例24 学生的生活(多态)...

    HttpClient以及获取页面内容应用

    List&lt;NameValuePair&gt; formparams = new ArrayList(); formparams.add(new BasicNameValuePair("username", "admin")); formparams.add(new BasicNameValuePair("password", "123456")); ...

    C#编程经验技巧宝典

    27 &lt;br&gt;第3章 程序算法 29 &lt;br&gt;3.1 数据结构 30 &lt;br&gt;0057 如何实现单向链表 30 &lt;br&gt;0058 如何实现双向链表 35 &lt;br&gt;0059 如何实现堆栈 41 &lt;br&gt;0060 队列的实现 43 &lt;br&gt;0061 树的...

    JAVA核心知识点整理(有效)

    2.2.3. 本地方法区(线程私有) ................................................................................................................ 23 2.2.4. 堆(Heap-线程共享)-运行时数据区 .....................

Global site tag (gtag.js) - Google Analytics