Ребята, подскажите пожалуйста, как вам удалось зарегаться на AppChine? Не устраивает их мобильный. Такое чувство, что кроме китайских номеров другие не принимают…
Еще в китайских магазинах жутко бести, помимо англ интерфейса, их страсть к «фото паспорта на фоне вас» обязательно ))))
Шеф, всё пропало? :) Прочитал статью — очень понравилось, то что искал «статья с которой можно начать»… Дочитал, искал линки на следующие статьи и не нашел… :( Но и за эту спасибо!
1) в свободное время попробую сделать…
2) имеете ввиду get(0), get(1), get(2)...? Если да:
Date startLinked = new Date();
for(int i = 0; i < k; i++) {
linkedList.get(i);
}
Date finishLinked = new Date();
long linkedTime = finishLinked.getTime() - startLinked.getTime();
Date startArray = new Date();
for(int i = 0; i < k; i++) {
arrayList.get(i);
}
---Get elements line ( 100k )
LinkedList: 11096 ms
ArrayList: 0 ms
3) Это мой первый тест. Почитал про System.currentTimeMillis(). Может его было и правильно использовать, но в данном случае на результат оно не повлияло.
Судя по всему, вы программируете уже давно, так понимаю на Питоне, поэтому для Вас данная статья покажется «детской», оно так и есть, но для начинающих — будет полезной. Я до сего теста считал, что LinkedList при добавлении в конец списка(.add(value)) — вне конкуренции, или как минимум на ровне с ArrayList(судя по материалам, что я читал). Оказалось, что ArrayList с этим справляется быстрее.
Всем спасибо за замечания. Постарался их все учесть и подкорректировать статью.
---Add elements ( 6kk )
LinkedList: 2363 ms
ArrayList: 495 ms
ArrayList is faster
---Insert elements to end( 1kk )
LinkedList: 149 ms
ArrayList: 34 ms
ArrayListis faster
Пожалуйста.
.add
LinkedList<Integer> linkedList = new LinkedList<Integer>();
ArrayList<Integer> arrayList = new ArrayList<Integer>();
int value = 123456;
System.out.println("---Add elements ( 6kk )");
Date startAddLinkedTime = new Date();
for(int i = 0; i < 6000000; i++) {
linkedList.add(value);
}
Date finishAddLinkedTime = new Date();
long addLinkedTime = finishAddLinkedTime.getTime() - startAddLinkedTime.getTime();
Date startAddArrayTime = new Date();
for(int i = 0; i < 6000000; i++) {
arrayList.add(value);
}
Date finishAddArrayTime = new Date();
long addArrayTime = finishAddArrayTime.getTime() - startAddArrayTime.getTime();
.add(index.value) LinkedList<Integer> linkedList = new LinkedList<Integer>();
linkedList.add(0);
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(0);
int value = 123456;
System.out.println("---Insert elements to end( 1kk )");
Date startLinked = new Date();
for(int i = 0; i < 1000000; i++) {
linkedList.add(linkedList.size()-1, value);
}
Date finishLinked = new Date();
long linkedTime = finishLinked.getTime() - startLinked.getTime();
Date startArray = new Date();
for(int i = 0; i < 1000000; i++) {
arrayList.add(arrayList.size()-1, value);
}
Date finishArray = new Date();
Если вопрос мне — то я надеялся, что кто-то из людей с опытом как раз на этот вопрос ответит…
Я объяснить, к сожалению, не могу. То что написано в статье про работу ArrayList — то по логике процедура одинакова…
Согласен, но для цели — определить что в какой ситуации быстрее, то решил пренебречь этой кучей. Т.к. она была +-одинакова для обоих списков и всех замеров. Вместе с замером 1080p не пережимал. Замеры делал раз 5, результаты были +-2-10ms
Но в любом случае за наводку спасибо. По мере свободного времени — попробую разобраться с ссылкой, что Вы дали.
Еще в китайских магазинах жутко бести, помимо англ интерфейса, их страсть к «фото паспорта на фоне вас» обязательно ))))
Только что проверил, у меня бросает NullPointer (Java 1.7 и 1.8)
Удаление с начала списка LinkedList вне конкуренции даже без итератора
h & (length — 1) = 14
2) имеете ввиду get(0), get(1), get(2)...? Если да:
3) Это мой первый тест. Почитал про System.currentTimeMillis(). Может его было и правильно использовать, но в данном случае на результат оно не повлияло.
Всем спасибо за замечания. Постарался их все учесть и подкорректировать статью.
p.s. т.к. через index,value вставить в конец списка мы не можем — данный пункт убираю.
.add
LinkedList<Integer> linkedList = new LinkedList<Integer>(); ArrayList<Integer> arrayList = new ArrayList<Integer>(); int value = 123456; System.out.println("---Add elements ( 6kk )"); Date startAddLinkedTime = new Date(); for(int i = 0; i < 6000000; i++) { linkedList.add(value); } Date finishAddLinkedTime = new Date(); long addLinkedTime = finishAddLinkedTime.getTime() - startAddLinkedTime.getTime(); Date startAddArrayTime = new Date(); for(int i = 0; i < 6000000; i++) { arrayList.add(value); } Date finishAddArrayTime = new Date(); long addArrayTime = finishAddArrayTime.getTime() - startAddArrayTime.getTime();
.add(index.value)
LinkedList<Integer> linkedList = new LinkedList<Integer>(); linkedList.add(0); ArrayList<Integer> arrayList = new ArrayList<Integer>(); arrayList.add(0); int value = 123456; System.out.println("---Insert elements to end( 1kk )"); Date startLinked = new Date(); for(int i = 0; i < 1000000; i++) { linkedList.add(linkedList.size()-1, value); } Date finishLinked = new Date(); long linkedTime = finishLinked.getTime() - startLinked.getTime(); Date startArray = new Date(); for(int i = 0; i < 1000000; i++) { arrayList.add(arrayList.size()-1, value); } Date finishArray = new Date();
Я объяснить, к сожалению, не могу. То что написано в статье про работу ArrayList — то по логике процедура одинакова…
Но в любом случае за наводку спасибо. По мере свободного времени — попробую разобраться с ссылкой, что Вы дали.