Junior — Middle
Ҳангоми истифодаи коллексияҳо, дар кадом ҳолатҳо гузариш зудтар анҷом меёбад: дар ArrayList ё дар LinkedList?
sobes.tech AI
Ҷавоб аз AI
Дарёфти элементҳо дар коллексияҳои ArrayList ва LinkedList дар Java бо сабаби сохтори дохилии онҳо дар иҷроиш фарқ мекунад.
- ArrayList асос ёфтааст ба рӯйхат, бинобар ин дастрасӣ ба элемент тавассути индекс дар вақти O(1) сурат мегирад. Дарёфти бо истифода аз цикл бо индексҳо хеле зуд аст.
- LinkedList рӯйхати дуҷониба пайвастшуда аст, ки дар он дастрасӣ ба элемент тавассути индекс талаб мекунад, ки аз оғоз ё охир гузариш кунад, ки вақти O(n) мегирад.
Аз ин рӯ, гузаронидани ҳамаи элементҳо бо истифода аз итератор ё foreach тақрибан баробар аст барои ҳар ду коллексия, аммо агар гузариш бо истифодаи индексҳо (масалан, get(i) дар цикл) анҷом дода шавад, пас ArrayList назар ба дигаре хеле тезтар хоҳад буд.
Масалан:
ArrayList<String> arrayList = new ArrayList<>();
LinkedList<String> linkedList = new LinkedList<>();
// пур кардани рӯйхатҳо
// Гузариш тез дар ArrayList
for (int i = 0; i < arrayList.size(); i++) {
String item = arrayList.get(i); // O(1)
}
// Гузариш суст дар LinkedList бо истифодаи индексҳо
for (int i = 0; i < linkedList.size(); i++) {
String item = linkedList.get(i); // O(n)
}
// тавсия дода мешавад, ки барои LinkedList истифодаи итератор ё foreach
for (String item : linkedList) {
// коркарди элемент
}
Бинобар ин, гузариш дар ArrayList тезтар аст, махсусан агар дастрасӣ тавассути индекс лозим бошад.