読者です 読者をやめる 読者になる 読者になる

java簡単比較 Stack

package testJava;

import java.util.Stack;

public class Main {
	final static int num = 0xffffff;

	public final static void main(String args[]) {
		long startTime;
		Stack<Integer> q1 = new Stack<Integer>();
		IntStack q2 = new IntStack();

		startTime = System.nanoTime();
		for (int i = 0; i < num; i++)
			q1.push(i);
		for (int i = 0; i < num; i++)
			q1.pop();
		System.out.println(System.nanoTime() - startTime);

		startTime = System.nanoTime();
		for (int i = 0; i < num; i++)
			q2.push(i);
		for (int i = 0; i < num; i++)
			q2.pop();
		System.out.println(System.nanoTime() - startTime);
	}

	static class IntStack {
		int buf[] = new int[0xffffff];
		int index = 0;

		void push(int x) {
			buf[index++] = x;
		}

		int pop() {
			return buf[--index];
		}

		boolean isEmpty() {
			return index == 0;
		}
	}
}
6880861988
19218510

IntStackはもちろん低機能だけど100倍くらい速い。
Stackの遅い部分は、いろいろチェックしてるからなのかIntegerを使ってるからなのかリストの許容量を途中で増やしてるからなのか他なのか、どうなのだろう。

StackをArrayDequeにしたら

3906090019
21421068

になった