Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как работает ArrayList? / 22 сообщений из 22, страница 1 из 1
26.11.2014, 10:16
    #38817005
VaneS Ri_lax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
Здравствуйте, занялся изучением языка Java, написал вот такой код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class Main {
    public static void main(String args[]){
        ArrayList<String> list = new ArrayList<String>();
        for(int i=0; i<5; i++){
            list.add("номер "+i);
        }
        System.out.println(list.size());
        
        list.remove(1);
        System.out.println(list.size());
        
        for(int i=0; i<list.size(); i++){
            System.out.println(list.get(i));
        }
        
    }
}


Выводит он у меня следующее:
Код: java
1.
2.
3.
4.
5.
6.
5
4
номер 0
номер 2
номер 3
номер 4


Я так понимаю все индексы стоящие после удаленного элемента сдвигаются на -1?
...
Рейтинг: 0 / 0
26.11.2014, 10:23
    #38817013
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
VaneS Ri_lax,

Учитесь смотреть исходный код в JDK. Любая IDE его может показывать.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public E remove(int index) {
	RangeCheck(index);

	modCount++;
	E oldValue = (E) elementData[index];

	int numMoved = size - index - 1;
	if (numMoved > 0)
	    System.arraycopy(elementData, index+1, elementData, index,
			     numMoved);
	elementData[--size] = null; // Let gc do its work

	return oldValue;
}
...
Рейтинг: 0 / 0
26.11.2014, 11:20
    #38817069
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
VaneS Ri_lax,
Да, в этом и основное отличие от LinkedList.
...
Рейтинг: 0 / 0
26.11.2014, 11:27
    #38817084
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
no56892VaneS Ri_lax,
Да, в этом и основное отличие от LinkedList.
Там индексы не сдвигаются? :D
...
Рейтинг: 0 / 0
26.11.2014, 11:34
    #38817095
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
Blazkowiczno56892VaneS Ri_lax,
Да, в этом и основное отличие от LinkedList.
Там индексы не сдвигаются? :D
Там их просто нет :D
...
Рейтинг: 0 / 0
26.11.2014, 12:21
    #38817169
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
no56892Там их просто нет :D
Если бы их небыло, это был был Set, а не List.
...
Рейтинг: 0 / 0
26.11.2014, 12:30
    #38817178
VaneS Ri_lax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
А скажите пожалуйста если я буду добавлять новый элемент вот так
Код: java
1.
2.
3.
 list.set(1,"aa");
list.set(3,"bb");
list.set(5,"asd");


То есть индекс будет случайное число, то как мне потом вывести все элементы?
...
Рейтинг: 0 / 0
26.11.2014, 12:36
    #38817193
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
VaneS Ri_laxТо есть индекс будет случайное число, то как мне потом вывести все элементы?
Так же как и обычно. JavaDoc вообще внимательно читали?
https://docs.oracle.com/javase/7/docs/api/java/util/List.html#set(int, E)
...
Рейтинг: 0 / 0
26.11.2014, 12:37
    #38817194
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
Blazkowiczno56892Там их просто нет :D
Если бы их небыло, это был был Set, а не List.
А да, я че-то ступил. Я имел ввиду, что индекс в коллекциях - возможность доступа к элементу за фикс. время (ArrayList) vs не фикс. (LinkedList).
...
Рейтинг: 0 / 0
26.11.2014, 13:31
    #38817291
VaneS Ri_lax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
BlazkowiczVaneS Ri_laxТо есть индекс будет случайное число, то как мне потом вывести все элементы?
Так же как и обычно. JavaDoc вообще внимательно читали?
https://docs.oracle.com/javase/7/docs/api/java/util/List.html#set(int, E)

Спасибо большое, я вроде разобрался!
Подскажите пожалуйста еще, можно ли зная значение узнать индекс?
...
Рейтинг: 0 / 0
26.11.2014, 13:36
    #38817296
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
VaneS Ri_laxПодскажите пожалуйста еще, можно ли зная значение узнать индекс?
Сложный вопрос. А что говорит документация?
https://docs.oracle.com/javase/7/docs/api/java/util/List.html#indexOf(java.lang.Object)
...
Рейтинг: 0 / 0
26.11.2014, 14:23
    #38817379
VaneS Ri_lax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
BlazkowiczVaneS Ri_laxПодскажите пожалуйста еще, можно ли зная значение узнать индекс?
Сложный вопрос. А что говорит документация?
https://docs.oracle.com/javase/7/docs/api/java/util/List.html#indexOf(java.lang.Object)
Да это то я понял, но вот если у меня несколько одинаковых значений, как можно узнать индексы всех этих значений?
...
Рейтинг: 0 / 0
26.11.2014, 14:25
    #38817384
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
VaneS Ri_lax,

Полным перебором.
...
Рейтинг: 0 / 0
26.11.2014, 15:51
    #38817501
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
VaneS Ri_lax, ты садист. Коллекция плачет от твоих экспериментов. Вобщем
эррейлист не любит удалений в "голове" листа. Он колбасит весь хвост.
Это как машины в пробке двигаются.

Юзай другой тип коллекции.
...
Рейтинг: 0 / 0
26.11.2014, 15:53
    #38817505
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
maytonэррейлист не любит удалений в "голове" листа.
System.arraycopy - нативная оптимизированая операция чуть ли не на инструкциях процессора. Есть мнение что его не особо колбасит.
...
Рейтинг: 0 / 0
26.11.2014, 15:54
    #38817506
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
Всё познаётся в сравнении. Видел перцев которые делали "очередь" на базе ArrayList.
...
Рейтинг: 0 / 0
27.11.2014, 07:03
    #38817969
VaneS Ri_lax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
maytonЮзай другой тип коллекции.
Может тогда что посоветуете? Я не говорил что мне нужно удалять начало коллекции. Будут удаляться повторяющиеся значения, а вот в каком месте они стоят, я этого не знаю.
...
Рейтинг: 0 / 0
27.11.2014, 07:08
    #38817971
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
Множество хранит (только) уникальные значения.
...
Рейтинг: 0 / 0
27.11.2014, 08:11
    #38817991
VaneS Ri_lax
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
Basil A. SidorovМножество хранит (только) уникальные значения.
Мне не нужно хранить только уникальные, мне нужно чтобы было именно удаление по определенному принципу. Но за совет про множество спасибо, пригодится!
...
Рейтинг: 0 / 0
27.11.2014, 09:16
    #38818027
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
VaneS Ri_laxmaytonЮзай другой тип коллекции.
Может тогда что посоветуете? Я не говорил что мне нужно удалять начало коллекции. Будут удаляться повторяющиеся значения, а вот в каком месте они стоят, я этого не знаю.
если известны все значения, которые нужно удалить из коллекции, то можете использовать итератор, проверяя каждый элемент на совпадение с удаляемыми значениями. Один проход и все удалено. Тут IMHO лучше LinkedList (если идеологически)
А так правильно тут сказали, смысл использовать лист, если можно сразу set, и ничего удалять не придёться.
...
Рейтинг: 0 / 0
27.11.2014, 11:17
    #38818191
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
VaneS Ri_laxЯ не говорил что мне нужно удалять начало коллекции. Будут удаляться повторяющиеся значения, а вот в каком месте они стоят, я этого не знаю.

Все зависит от того как часто.
ArrayList хорош на операциях поиска i-го элемента. Ну и на полном сканировании.
Если есть правильная оценка сверху количества элементов, которые собираются в него добавить, то и добавление элементов в конец идет быстро. В общем случае, на операциях изменения количества элементов у него могут быть задержки связанные с копированием элементов (вплоть до всех).

Если операции удаления редки, а поиск i-го элемента происходит часто, то это одна ситуация, если, наоборот, другая.
...
Рейтинг: 0 / 0
27.11.2014, 11:26
    #38818198
Сергей Арсеньев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как работает ArrayList?
DDiverесли известны все значения, которые нужно удалить из коллекции,
TC написал простым русским языком все те Ai, которые удолетворяют условиям
для любых i,j таких,
что i>=0
и j>=0
i<A.size()
и j<i
Aget(i).equals(A.get(j)).

DDiverОдин проход и все удалено.
ну-ну.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как работает ArrayList? / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]