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 20Queue本身并不是线程安全的, 有两种方法来保证线程安全:
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 存入 和 取出 是线程安全的吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)