「队列java数组」java数组的数组

博主:adminadmin 2022-12-08 11:03:07 62

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

本文目录一览:

java 数组队列 链表队列哪个好

如果说是队列,那么建议使用链表,因为队列本身不需要全局遍历,你用作队列无非就是在表的前后进行操作,用链表合适一点。

但是,如果你是要用队列,那么建议你用JDK自带的Queue,Deque,BlockingQueue等

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 队列

//通过LinkedList实现队列

package 队列和堆栈;

import java.util.*;

public class LinkedListQueueTest {

//字段

private LinkedList list;

//无参数构造

public LinkedListQueueTest()

{

list=new LinkedList();

}

//队列元素的个数

public int size()

{

return list.size();

}

//进入队列

public void enqueue(Object obj)

{

list.addLast(obj);

}

//对头出来

public Object dequeue()

{

return list.removeFirst();

}

//浏览对头元素

public Object front()

{

//return list.getFirst();

return list.peekFirst();

}

//判断队列是否为空

public boolean isEmpty()

{

return list.isEmpty();

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

LinkedListQueueTest llq=new LinkedListQueueTest();

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

llq.enqueue("147");

llq.enqueue("258");

llq.enqueue("369");

System.out.println(llq.size());

System.out.println("移除队列头元素:"+llq.dequeue());

System.out.println(llq.size());

llq.enqueue("abc");

llq.enqueue("def");

System.out.println(llq.size());

System.out.println("查看队列的头元素:"+llq.front());

System.out.println(llq.size());

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

}

}

通过数组实现

package 队列和堆栈;

import java.util.NoSuchElementException;

//通过数组来实现队列

public class ArrayQueue {

//字段

public static Object[] data;

//队列的元素个数

protected int size ;

//队列头

protected int head;

//队列尾

public static int tail;

/**

*

*/

//无参数构造函数

public ArrayQueue() {

final int INITIAL_LENGTH=3;

data=new Object[INITIAL_LENGTH];

size=0;

head=0;

tail=-1;

}

//队列元素个数方法

public int size()

{

return size;

}

public boolean isEmpty()

{

return size==0;

}

//得到队列头元素

public Object front()

{

if(size==0)

throw new NoSuchElementException();

return data[head];

}

//进入队列enqueue()方法

public void enqueue(Object obj)

{

//此时队列已经满

if(size==data.length){

Object[] oldData=data;

data=new Object[data.length*2];

//if(head==0)

System.arraycopy(oldData, head, data, 0, oldData.length-head);

if(head0)

System.arraycopy(oldData, 0, data, head+1, tail+1);

head=0;

tail=oldData.length-1;

}

tail=(tail+1)%data.length;

size++;

data[tail]=obj;

}

//队列的元素出队

public Object dequeue()

{

if(size==0)

throw new NoSuchElementException();

Object ele=data[head];

//循环队列

head=(head+1)%data.length;

size--;

return ele;

}

@Override

public String toString() {

// TODO Auto-generated method stub

return super.toString();

}

}

通过向量实现:

//通过向量实现栈

package 队列和堆栈;

import java.util.*;

public class VectorStackTest {

//字段

Vector v;

//构造函数

public VectorStackTest()

{

v=new Vector();

}

//元素的个数

public int size()

{

return v.size();

}

//是否为空

public boolean isEmpty()

{

return size()==0;

}

//进栈

public Object Push(Object obj)

{

v.addElement(obj);

return obj;

}

//出栈方法

public Object Pop()

{

int len=size();

Object obj=Peek();

v.removeElementAt(len-1);

return obj;

}

//查看栈顶元素

public Object Peek()

{

int len = size();

if (len == 0)

throw new EmptyStackException();

return v.elementAt(len - 1);

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

VectorStackTest vst=new VectorStackTest();

System.out.println("大小:"+vst.size());

vst.Push("123");

vst.Push("456");

vst.Push("789");

vst.Push("abc");

System.out.println("大小:"+vst.size());

System.out.println("栈顶:"+vst.Peek());

System.out.println("出栈:"+vst.Pop());

vst.Push("def");

vst.Push("147");

System.out.println("大小:"+vst.size());

System.out.println("栈顶:"+vst.Peek());

System.out.println("出栈:"+vst.Pop());

System.out.println(vst.Peek());

vst.Push("def");

vst.Push("147");

System.out.println(vst.Pop());

System.out.println(vst.Pop());

System.out.println(vst.Peek());

System.out.println(vst.Pop());

System.out.println(vst.Pop());

vst.Push("1aadf");

vst.Push("2dafad");

vst.Push("123789");

System.out.println(vst.Pop());

System.out.println(vst.Peek());

System.out.println(vst.Pop());

System.out.println(vst.Peek());

System.out.println("------------------end------------");

VectorStackTest llst=new VectorStackTest();

llst.Push("123");

llst.Push("456");

System.out.println("栈顶:"+llst.Peek());

System.out.println("出栈:"+llst.Pop());

System.out.println(llst.Peek());

llst.Push("789");

llst.Push("abc");

System.out.println("栈顶:"+llst.Peek());

System.out.println("出栈:"+llst.Pop());

System.out.println(llst.size());

System.out.println("栈顶:"+llst.Peek());

}

}

推荐:都看API文档。有疑问可以问我,QQ:285479197

JAVA中,常用的队列实现是哪个?

队列的实现单纯的是数据结构的问题,既可以用链表结构实现队列,也可以用数组实现。这和语言不是紧密关系,java可以这样实现,c、c++

也可以。

java队列怎么声明才能每次插入一个数组

import java.util.LinkedList;

import java.util.Queue;

public class TestQueue {

    public static void main(String[] args) {

        // 声明

        Queueint[] queue = new LinkedListint[]();

        int[] numArr1 = {26, 17};

        int[] numArr2 = {27, 18};

        // 添加

        queue.offer(numArr1);

        queue.offer(numArr2);

        // 提取队列第一个元素

        int[] element = queue.element();

        // 输出第一个元素

        System.out.println("输出第一个元素:" + element[0] + ", " + element[1]);

        System.out.println("循环输出队列:");

        for (int[] a : queue) {

            System.out.println(a[0] + ", " + a[1]);

        }

    }

}

关于队列java数组和java数组的数组的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-08,除非注明,否则均为首码项目网原创文章,转载请注明出处。