今天在AOJ做题时(ALDS1_3_C :Doubly Link List)最初总是超时和内存超出,经改进的出一下结论
LinkedList:双向链表
ArrayDeque:用数组实现
的队列(当用作堆栈时,此类可能会比Stack快,并且当用作队列时速度高于LinkedList )。
总结:(对于大量在两端操作时)总体效率上ArrayDeque>LinkedList
1
Deque接口下的两个类 LinkedList,ArrayDequeLinkedList:双向链表
ArrayDeque:用数组实现
的队列(当用作堆栈时,此类可能会比Stack快,并且当用作队列时速度高于LinkedList )。
总结:(对于大量在两端操作时)总体效率上ArrayDeque>LinkedList
2:
BufferReader br = new BufferReader(new InputStreamReader(System.in))Scanner sc = new Scanner(System.in)
BufferReader效率比Scanner高3:
try{}catch(){}效率会比throws慢一点点4:
字符串比数字存储需要的内存多点5:
Integer.parseInt类型转换会耗费一定的时间
附上代码:
import java.io.*;
import java.util.*;
public class _CDoublyLinkedList {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Deque<String> list = new ArrayDeque<>();
for (int i = 0; i < n; i++) {
String sp = br.readLine();
if (sp.startsWith("insert")) {
list.addFirst(sp.substring(sp.indexOf(" ") + 1));
} else if (sp.equals("deleteFirst")) {
list.removeFirst();
} else if (sp.equals("deleteLast")) {
list.removeLast();
} else {
list.remove(sp.substring(sp.indexOf(" ") + 1));
}
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder ans = new StringBuilder();
ans.append(list.poll());
for (String s : list) {
ans.append(" ");
ans.append(s);
}
bw.write(ans.toString());
bw.newLine();
bw.close();
br.close();
}
}