`
杨杨和花花
  • 浏览: 22432 次
  • 性别: 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());
		
	}
}

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

分享到:
评论

相关推荐

    java 自定义Queue队列

    这包括选择合适的基础数据结构(如ArrayList、LinkedList等),考虑性能和并发访问等因素,以及正确实现Queue接口的所有方法。通过这种方式,我们可以创建一个高效、定制化的队列数据结构,满足特定的业务需求。

    java双端队列的实现-Java实现自定义双端队列(链表和数组两种方式) 数组和链表.pdf

    Java 中的双端队列实现 在 Java 中,LinkedList 的内部使用双端链表队列原理实现,而 ArrayList 的内部使用双端数组队列原理实现。 Java 实现自定义双端队列可以通过链表和数组两种方式实现,双端队列可以充当单端...

    用自定的ArrayList实现队列

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

    java-Using-Array-for-Queue.zip_java队列实现

    首先,我们来看基于数组的队列实现。`ArrayQueue.java`文件很可能是这个实现的核心。在Java中,创建一个队列可以借助数组的特性,即头部插入元素,尾部删除元素。为了支持动态扩容,当队列满时,通常会创建一个新的...

    arrayList排序

    如果ArrayList中的元素是自定义类,并且没有实现Comparable接口,或者需要按照非自然顺序进行排序,可以创建一个Comparator实例,并作为`Collections.sort()`方法的参数。例如,假设有一个User类,我们想要根据姓名...

    Android之循环队列操作

    以下是一个简单的循环队列实现: ```java public class CircularQueue&lt;T&gt; { private T[] elements; private int front; // 队头位置 private int rear; // 队尾位置 private int size; public CircularQueue...

    java自定义集合类

    自定义集合类的一个例子是,你可能想要创建一个支持优先级排序的队列,这时可以实现一个`PriorityQueue`类,基于最小堆数据结构实现,允许用户通过优先级插入和删除元素。 在实际应用中,自定义集合类可以提高代码...

    使用LinkedList模拟堆栈

    在Java中,LinkedList同样可以用于实现队列,主要通过addLast()和removeFirst()方法。 以下是使用LinkedList模拟队列的实现: 1. 创建LinkedList实例。 ```java LinkedList&lt;Object&gt; queue = new LinkedList(); ```...

    常用数据结构(堆栈,队列,列表)JAVA代码

    - `Stapel.java`可能包含了堆栈的实现,包括自定义的堆栈类以及相关的操作方法。 2. **队列(Queue)**: - 队列是一种先进先出(FIFO,First In First Out)的数据结构。最先进入的元素将首先被删除。 - Java...

    多级优先队列.zip

    在Java中实现多级优先队列,可以使用优先队列(PriorityQueue)类作为基础,通过自定义比较器(Comparator)来实现优先级规则。此外,可能还需要一个容器(如ArrayList或LinkedList)来存储不同优先级的队列。为了...

    Java版数据结构代码,栈,动态数组,队列,链表,二叉树

    在Java中,ArrayList就是动态数组的一种实现。栈结构中提到动态数组的压栈方法,意味着在数组满时,代码可能包含自动扩展数组容量的逻辑,以适应不断变化的需求。 3. **队列(Queue)**:队列是一种“先进先出”...

    51. ArrayList LinkedList Set HashMap介绍.txt

    - **应用场景**:适用于频繁插入和删除元素的场景,如实现队列、栈等数据结构。 ### Set #### 简介 `Set` 接口代表一个不允许重复元素的集合。Java 中有多种 `Set` 的实现类,如 `HashSet` 和 `TreeSet`。 #### ...

    mina自定义编码器-自行做会话累积

    本项目是关于如何自定义编码器来实现会话累积功能的实践。 首先,我们需要理解Mina中的编码器接口`org.apache.mina.core.session.IoSession`。`IoSession`代表了客户端和服务器之间的一个连接,它包含了会话的状态...

    java常用例子(队列,排序,列表,时间,文件操作)40例子

    此外,你还可以学习自定义比较器以实现特定的排序逻辑。 列表是Java集合框架中的重要部分,主要由`ArrayList`和`LinkedList`实现。`ArrayList`基于动态数组,适合随机访问;`LinkedList`则是双向链表,适合频繁插入...

    C#多线程处理多个队列数据的方法

    本示例介绍了一种利用ThreadPool类和委托来实现多线程处理多个队列数据的方法。以下是详细的知识点解析: 1. **线程池(ThreadPool)**: ThreadPool是一个系统级线程池,它负责管理和调度线程。通过ThreadPool,...

    android自定义相机连拍

    在Android平台上,自定义相机功能是一项常见的需求,尤其在实现连拍效果时,开发者需要对Android的Camera API有深入理解。本文将详细讲解如何在Android中实现一个自定义相机并支持连拍功能。 首先,我们需要了解...

    java 和 c# 不同的7个方法 实现 ABCD 全排列

    在Java中,可以使用`ArrayList`配合`Collections.swap()`,C#中可使用`List&lt;T&gt;`配合`Swap()`方法。 4. **位运算**: 利用位运算,我们可以创建一个二进制数,每一位代表一个字符是否被选中。通过遍历所有可能的二...

    java大作业用数组进行队列排序

    在Java编程中,大作业通常涉及实际应用中的问题解决,这次的任务是利用数组实现一个队列排序,并且能够动态地插入新的元素。这个任务主要涵盖了两个核心知识点:数组的使用和排序算法。下面将详细解释这两个方面。 ...

    用Java实现的数据结构暨算法,同时对其进行了测试.zip

    队列是先进先出(FIFO)的数据结构,Java的LinkedList可以作为双端队列,而java.util.Queue接口提供了多种队列实现。 树结构包括二叉树、平衡树(如AVL树和红黑树)、堆(如优先队列)等。二叉树每个节点最多有两个...

    《Java数据结构和算法》学习笔记(3)——栈和队列

    Stack文件可能包含栈的数据结构实现,例如使用ArrayList或LinkedList作为底层数据结构,以及如何实现基本的压栈、弹栈操作,甚至可能包含自定义栈类的设计。 PriorityQ可能涉及优先队列的实现,包括如何利用...

Global site tag (gtag.js) - Google Analytics