「java队列数组」java数组列表

博主:adminadmin 2023-03-21 10:33:08 560

本篇文章给大家谈谈java队列数组,以及java数组列表对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java中队列,数组和list集合的区别

数组是JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素。但是速度是要有代价的,当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里是不能改变的。还有一点,JAVA里面的数组是会做边界检查的,所以当你越界访问时,会抛出RuntimeException,所以不用担心在C或C++因为不做边界检查而出现的问题了,当然边界检查是以牺牲效率为代价的。数组与其它容器类的区别体现在三个方面:效率、类型识别和可以持有primitives。 JAVA里面提供的其他容器还包括List,Set和Map。他们处理对象的时候就好像这些这些对象都没有自己的类型一样,容器将它所含的元素都看成是JAVA中所有类的根类Object类型的,这样我们只需创建一种容器,就能把所有的类型的对象全部放进去。但是当取出的时候,那就需要我们自己进行类型转换了,不过在JAVA Tiger版里面新引入了“泛型”的概念,结合容器类一起使用就可以解决类型转换的问题,关于“泛型”这就不详细讲解了。从上面的角度来看,这种做法很不错,但是就是苦了primitives,如果是常量的话,可以把primitive转换成wrapper类然后放进容器里面,如果是变量的话,那就只能放在你自己的类里了。与其他容器类相比,数组会在编译的时候作类型检查,从而防止你插入错误类型的对象,或者在提取对象的时候把对象的类型给搞错了,JAVA在编译和运行的时候都能阻止你将一个不恰当的消息传给对象。至于效率,数组无疑是要高于其他容器类的,因为有些容器类的实现就是基于数组的,比如ArrayList。不论从类型检查还是效率的角度来考虑,我们首选数组来作为容器都是没错的,但是数组的缺点就是功能太弱了,所以才会有容器类的出现。 要多说几句的就是,java.util包里面有一个Arrays类,它包括了一组可以用于数组的static的工具方法,其中最基本的是四个方法:用来比较两个数组是否相等的equals();用来填充数组的fill();用来对数组进行排序的sort();以及用于在一个已经排序的数组中查找元素的binarySearch()。所有这些方法都对primitives和Object进行了重载。此外还有一个asList()方法,它接受一个数组,然后把它转成一个List容器。JAVA标准类库还提供了一个System.arraycopy()的静态方法,它能以较快的速度拷贝数组,对primitive和Object都进行了重载,但是注意当对Object数组进行拷贝时,进行的是浅拷贝(shallow copy)

java用数组实现队列

1.1. 队列的数据结构

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

1.2. Java实现

QueueTest

package ch04;

public class QueueTest {

public static void main(String[] args) {

ArrayQueue queue = new ArrayQueue(10);

System.out.println(queue.isEmpty());

for (int i = 0; i 10; i++) {

queue.insert(i);

}

System.out.println(queue.isFull());

while (!queue.isEmpty()) {

System.out.println(queue.remove());

}

}

}

class ArrayQueue {

private int[] arrInt;// 内置数组

private int front;// 头指针

private int rear;// 尾指针

public ArrayQueue(int size) {

this.arrInt = new int[size];

front = 0;

rear = -1;

}

/**

* 判断队列是否为空

*

* @return

*/

public boolean isEmpty() {

return front == arrInt.length;

}

/**

* 判断队列是否已满

*

* @return

*/

public boolean isFull() {

return arrInt.length - 1 == rear;

}

/**

* 向队列的队尾插入一个元素

*/

public void insert(int item) {

if (isFull()) {

throw new RuntimeException("队列已满");

}

arrInt[++rear] = item;

}

/**

* 获得对头元素

*

* @return

*/

public int peekFront() {

return arrInt[front];

}

/**

* 获得队尾元素

*

* @return

*/

public int peekRear() {

return arrInt[rear];

}

/**

* 从队列的对头移除一个元素

*

* @return

*/

public int remove() {

if (isEmpty()) {

throw new RuntimeException("队列为空");

}

return arrInt[front++];

}

}

运行结果如下:

false

true

1

2

3

4

5

6

7

8

9

java常用的几种数据结构,堆栈,队列,数组,链

下面给你简单介绍:堆栈,队列,数组,链表

堆栈

采用该结构的集合,对元素的存取有如下的特点:

先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。

栈的入口、出口的都是栈的顶端位置

压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。

弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。

队列

采用该结构的集合,对元素的存取有如下的特点:

先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,安检。排成一列,每个人依次检查,只有前面的人全部检查完毕后,才能排到当前的人进行检查。队列的入口、出口各占一侧。

数组

采用该结构的集合,对元素的存取有如下的特点:

查找快:通过索引,可以快速访问指定位置的元素

增删慢:

指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引,复制到新数组对应索引的位置。

链表

采用该结构的集合,对元素的存取有如下的特点:

多个节点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。

节点:两个部分:数据域(存储的数值),指针域(存储地址)

查找慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素

增删快:

增加元素:操作如左图,只需要修改连接下个元素的地址即可。

删除元素:操作如右图,只需要修改连接下个元素的地址即可。

Java如何使用数组实现循环队列的案例

class Element{

int id;

String name;

Element(int a,String n){

id=a;name=n;

}

}

class SeqQueue{

int first,last,maxsize;

Element queue[];

SeqQueue(int i){

maxsize=i;

first=last=-1;

queue=new Element[i];

}

public void clear(){//置空

first=last=-1;

}

public boolean isEmpty(){//判空

if(first==-1)return true;

else return false;

}

public Element getFirst(){//取队列头元素

if(first==-1)return null;

else return queue[first+1];

}

public boolean isFull(){//判满

if((last+1)%maxsize==first)return true;

else return false;

}

public boolean enQueue(Element e){//入队

if(this.isFull())return false;

if(this.isEmpty())

first=last=0;

else

last=(last+1)%maxsize;

queue[last]=e;

return true;

}

public Element deQueue(){//出队

Element t=queue[first];

if(this.isEmpty())return null;

if(first==last){

queue[first]=null;

this.clear();

return t;

}

queue[first]=null;

first=(first+1)%maxsize;

return t;

}

public int getLength(){//队列长度

if(last=first)return last-first+1;

else return maxsize-(first-last)+1;

}

public void display(){//打印所有元素

int i,j;

for (i=first,j=0;jthis.getLength();i=(i+1)%maxsize,j++)

System.out.println(queue[i].id);

}

}

java队列数组的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java数组列表、java队列数组的信息别忘了在本站进行查找喔。