c#中的Queue和stack怎么遍历直接使用ToArray()去获取嘛

c#中的Queue和stack怎么遍历直接使用ToArray()去获取嘛,第1张

Queue和Stack绝大多数情况是不需要遍历的,因为它们设计出来不是为了这个功能

每种泛型集合都有自己使用的场景

如果要遍历 用foreach或者linq都可以 不需要先ToArray

参考代码和注释如下

简单测试了下,如果有问题接着在讨论

public class Queue {

private int[] elements;

public static final int DEFAULT_CAPACITY =8;//默认长度8

private int size = 0;

public Queue() {

elements = new int[DEFAULT_CAPACITY];

}

public Queue(int capacity) {

elements = new int[capacity];

}

public void enqueue(int v) {

if (size >= elementslength) {// 数组扩容

int[] temp = new int[elementslength  2];

Systemarraycopy(elements, 0, temp, 0, elementslength);

elements = temp;

}

elements[size++] = v;

}

public int dequeue() {// 先进先出

if (empty()) {

throw new RuntimeException("异常");

}

int x = elements[0];// 先把第一个元素保存出来

// 左移一位

// int[] temp = new int[elementslength];

// Systemarraycopy(elements,1, temp, 0, elementslength-1);

// elements = temp;

// 左移一位

for (int i = 0; i < elementslength - 1; i++) {

elements[i] = elements[i + 1];

}

elements[elementslength - 1] = 0;// 外面一般访问不了elements 后面的元素可以不用归零,但是归零了感觉舒服点

size--;

return x;

}

public boolean empty() {

return size == 0;

}

public int getSize() {

return size;

}

}

输出

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Queue本身并不是线程安全的, 有两种方法来保证线程安全

1 手动加锁。

Queue myCollection = new Queue();

lock(myCollectionSyncRoot)

{

foreach (object item in myCollection)

{

// Insert your code here

}

}

2 调用Synchronized方法,这时候得到的就是一个线程安全的Queue

Queue mySyncdQ = QueueSynchronized( myQ );

以上就是关于c#中的Queue和stack怎么遍历直接使用ToArray()去获取嘛全部的内容,包括:c#中的Queue和stack怎么遍历直接使用ToArray()去获取嘛、Java设计一个名为Queue的类用于存储整数。像栈一样,队列具有元素。在栈中,元素以“后进先出”的方式、Queue 存入 和 取出 是线程安全的吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9581418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存