最近参加金山网络的一次笔试,给我感觉是基础需要很扎实才行。其中就有一道题是关于自定义队列的。这个问题确实很常见,细心的人肯定第一时刻就去看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、LinkedList等),考虑性能和并发访问等因素,以及正确实现Queue接口的所有方法。通过这种方式,我们可以创建一个高效、定制化的队列数据结构,满足特定的业务需求。
Java 中的双端队列实现 在 Java 中,LinkedList 的内部使用双端链表队列原理实现,而 ArrayList 的内部使用双端数组队列原理实现。 Java 实现自定义双端队列可以通过链表和数组两种方式实现,双端队列可以充当单端...
队列的核心为先进先出,即先入队的元素先出队,在之前手写的ArrayList中添加了删除方法实现了队列 /** * 在之前自定义的动态数组基础上完成队列,动态数组中要添加删除方法 * * @author 大刘 */ public class ...
首先,我们来看基于数组的队列实现。`ArrayQueue.java`文件很可能是这个实现的核心。在Java中,创建一个队列可以借助数组的特性,即头部插入元素,尾部删除元素。为了支持动态扩容,当队列满时,通常会创建一个新的...
如果ArrayList中的元素是自定义类,并且没有实现Comparable接口,或者需要按照非自然顺序进行排序,可以创建一个Comparator实例,并作为`Collections.sort()`方法的参数。例如,假设有一个User类,我们想要根据姓名...
以下是一个简单的循环队列实现: ```java public class CircularQueue<T> { private T[] elements; private int front; // 队头位置 private int rear; // 队尾位置 private int size; public CircularQueue...
自定义集合类的一个例子是,你可能想要创建一个支持优先级排序的队列,这时可以实现一个`PriorityQueue`类,基于最小堆数据结构实现,允许用户通过优先级插入和删除元素。 在实际应用中,自定义集合类可以提高代码...
在Java中,LinkedList同样可以用于实现队列,主要通过addLast()和removeFirst()方法。 以下是使用LinkedList模拟队列的实现: 1. 创建LinkedList实例。 ```java LinkedList<Object> queue = new LinkedList(); ```...
- `Stapel.java`可能包含了堆栈的实现,包括自定义的堆栈类以及相关的操作方法。 2. **队列(Queue)**: - 队列是一种先进先出(FIFO,First In First Out)的数据结构。最先进入的元素将首先被删除。 - Java...
在Java中实现多级优先队列,可以使用优先队列(PriorityQueue)类作为基础,通过自定义比较器(Comparator)来实现优先级规则。此外,可能还需要一个容器(如ArrayList或LinkedList)来存储不同优先级的队列。为了...
在Java中,ArrayList就是动态数组的一种实现。栈结构中提到动态数组的压栈方法,意味着在数组满时,代码可能包含自动扩展数组容量的逻辑,以适应不断变化的需求。 3. **队列(Queue)**:队列是一种“先进先出”...
- **应用场景**:适用于频繁插入和删除元素的场景,如实现队列、栈等数据结构。 ### Set #### 简介 `Set` 接口代表一个不允许重复元素的集合。Java 中有多种 `Set` 的实现类,如 `HashSet` 和 `TreeSet`。 #### ...
本项目是关于如何自定义编码器来实现会话累积功能的实践。 首先,我们需要理解Mina中的编码器接口`org.apache.mina.core.session.IoSession`。`IoSession`代表了客户端和服务器之间的一个连接,它包含了会话的状态...
此外,你还可以学习自定义比较器以实现特定的排序逻辑。 列表是Java集合框架中的重要部分,主要由`ArrayList`和`LinkedList`实现。`ArrayList`基于动态数组,适合随机访问;`LinkedList`则是双向链表,适合频繁插入...
本示例介绍了一种利用ThreadPool类和委托来实现多线程处理多个队列数据的方法。以下是详细的知识点解析: 1. **线程池(ThreadPool)**: ThreadPool是一个系统级线程池,它负责管理和调度线程。通过ThreadPool,...
在Android平台上,自定义相机功能是一项常见的需求,尤其在实现连拍效果时,开发者需要对Android的Camera API有深入理解。本文将详细讲解如何在Android中实现一个自定义相机并支持连拍功能。 首先,我们需要了解...
在Java中,可以使用`ArrayList`配合`Collections.swap()`,C#中可使用`List<T>`配合`Swap()`方法。 4. **位运算**: 利用位运算,我们可以创建一个二进制数,每一位代表一个字符是否被选中。通过遍历所有可能的二...
在Java编程中,大作业通常涉及实际应用中的问题解决,这次的任务是利用数组实现一个队列排序,并且能够动态地插入新的元素。这个任务主要涵盖了两个核心知识点:数组的使用和排序算法。下面将详细解释这两个方面。 ...
队列是先进先出(FIFO)的数据结构,Java的LinkedList可以作为双端队列,而java.util.Queue接口提供了多种队列实现。 树结构包括二叉树、平衡树(如AVL树和红黑树)、堆(如优先队列)等。二叉树每个节点最多有两个...
Stack文件可能包含栈的数据结构实现,例如使用ArrayList或LinkedList作为底层数据结构,以及如何实现基本的压栈、弹栈操作,甚至可能包含自定义栈类的设计。 PriorityQ可能涉及优先队列的实现,包括如何利用...