Програма подсчета времени операций Collection
Есть 5 коллекций - ArrayList, LinkedList, CopyOnWriteArrayList, TreeMap, HashMap. На вход поступает 10000000 элементов с типом Integer.
Для колекций ArrayList, LinkedList, CopyOnWriteArrayList посчитать скорость в милисекундах:
- добавление в начало;
- добавление в середину;
- добавление в конец;
- поиск по значению;
- удаление в начале;
- удаление в середине;
- удаление в конце.
Для коллекций TreeMap, HashMap посчитать скорость в милисекундах:
- добавление;
- поиск по ключу;
- удаление.
Данные воводятся один раз для всех колекций.
Как это все посчитать у одной коллекции понимаю, а как у всех 5 сразу нет?
Ответы (1 шт):
Автор решения: Александр Мищенко
→ Ссылка
package t;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class CollecionOperaition {
public static void main(String[] args) {
List<Integer> List = new ArrayList<>();
for (int i = 0; i < 1000000; i++) {
List.add(i);
}
List<Integer> linkedList = new LinkedList<>();
List<Integer> arrayList = new ArrayList<>();
List<Integer> copyOnWrite = new CopyOnWriteArrayList<>();
linkedList.addAll(List);
arrayList.addAll(List);
copyOnWrite.addAll(List);
addBegin(linkedList);
addBegin(arrayList);
addBegin(copyOnWrite);
System.out.println("addBegin");
addMiddle(linkedList);
addMiddle(arrayList);
addMiddle(copyOnWrite);
System.out.println("addMiddle");
addEnd(linkedList);
addEnd(arrayList);
addEnd(copyOnWrite);
System.out.println("addEnd");
measureTime(linkedList);
measureTime(arrayList);
measureTime(copyOnWrite);
System.out.println("measureTime");
removeBegin(linkedList);
removeBegin(arrayList);
removeBegin(copyOnWrite);
System.out.println("removeBegin");
removeMiddle(linkedList);
removeMiddle(arrayList);
removeMiddle(copyOnWrite);
System.out.println("removeMiddle");
removeEnd(linkedList);
removeEnd(arrayList);
removeEnd(copyOnWrite);
System.out.println("removeEnd");
addEnd(linkedList);
addEnd(arrayList);
addEnd(copyOnWrite);
System.out.println("addEnd");
}
private static void addBegin(List<Integer> list) {
int j = 1;
long start = System.currentTimeMillis();
list.add(0, j);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
private static void addMiddle(List<Integer> list) {
int j = 1;
long start = System.currentTimeMillis();
list.add(list.size() / 2, j);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
private static void addEnd(List<Integer> list) {
int j = 1;
long start = System.currentTimeMillis();
list.add(j);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
private static void measureTime(List<Integer> list) {
long start = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
list.get(i);
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
private static void removeBegin(List<Integer> list) {
long start = System.currentTimeMillis();
list.remove(0);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
private static void removeMiddle(List<Integer> list) {
int j = list.size() / 2;
long start = System.currentTimeMillis();
list.remove(j);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
private static void removeEnd(List<Integer> list) {
long start = System.currentTimeMillis();
list.remove(list.size() - 1);
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}