|
|
|
по какой причине ArrayList.get() реализовано через кастинг вниз?
|
|||
|---|---|---|---|
|
#18+
кастинг вниз - относительно дорогая операция. смотрим код ArrayList Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. То есть каждый раз, когда мы делаем get() истандартная имплементация ArrayList делает приведение вниз. А ведь можно было бы так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. подозреваю, что я что-то упускаю. Сравнение в производительности не проводил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2013, 15:07:36 |
|
||
|
по какой причине ArrayList.get() реализовано через кастинг вниз?
|
|||
|---|---|---|---|
|
#18+
chabapokподозреваю, что я что-то упускаю. Верно. И имя ему - erasure. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2013, 15:13:04 |
|
||
|
по какой причине ArrayList.get() реализовано через кастинг вниз?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Хм. То есть типы что там, что тут стираются, и поэтому в обоих случая кастинг вниз все равно неявно делается. И если так - верно ли, что генерики будут работать медленее, изза этих постоянных неявных каситнгов? То есть если у нас есть задача, в которой активно используются колекции, лучше генерики заменить своей либой, с конкретными типами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2013, 15:20:52 |
|
||
|
по какой причине ArrayList.get() реализовано через кастинг вниз?
|
|||
|---|---|---|---|
|
#18+
chabapokТо есть типы что там, что тут стираются, и поэтому в обоих случая кастинг вниз все равно неявно делается. Да, там где вы с generic типа переходите на конкретый будет downcasting с дополнительными проверками на совместимость типов. chabapokИ если так - верно ли, что генерики будут работать медленее, изза этих постоянных неявных каситнгов? На сколько я знаю, да. Поэтому, если не ошибаюсь, в C# генерики работают без Erasure и там в рантайме генерится коллекция под конкретный тип. chabapokТо есть если у нас есть задача, в которой активно используются колекции, лучше генерики заменить своей либой, с конкретными типами? Экономия на спичках. Если больше совсем нечего оптимизировать, то да. Можно попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2013, 15:28:15 |
|
||
|
по какой причине ArrayList.get() реализовано через кастинг вниз?
|
|||
|---|---|---|---|
|
#18+
Где-то в смежном форуме спорят на тему накладных расходов на instanceof. Есть пораскинуть мозгами на тему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2013, 20:20:37 |
|
||
|
по какой причине ArrayList.get() реализовано через кастинг вниз?
|
|||
|---|---|---|---|
|
#18+
Добрый день, chabapok! chabapokкастинг вниз - относительно дорогая операция. Когда он есть. chabapokсмотрим код ArrayList Код: java 1. 2. 3. 4. 5. 6. 7. В .class не хранится чему равен тип E. Поэтому реального преобразования тут нет. Соответственно нет ни контроля типов (можно запихнуть хоть что), ни накладных расходов. chabapok Код: java 1. 2. 3. 4. 5. 6. Я думаю тут что-то связанное с минимизацией изменений при переходе от 1.4 и 1.5 - типа меньше кода меняли- меньше вероятность косяков :) -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2013, 09:09:50 |
|
||
|
по какой причине ArrayList.get() реализовано через кастинг вниз?
|
|||
|---|---|---|---|
|
#18+
GKS_SamaraВ .class не хранится чему равен тип E. Поэтому реального преобразования тут нет. Верно. GKS_SamaraСоответственно нет ни контроля типов (можно запихнуть хоть что), ни накладных расходов. Не совсем так. Накладные расходы могут возникнуть на этапе использования коллекции. В "клиентском" коде. GKS_SamaraЯ думаю тут что-то связанное с минимизацией изменений при переходе от 1.4 и 1.5 - типа меньше кода меняли- меньше вероятность косяков :) Тоже верно. Только дело не в "косяках", а в обратной совместимости версий, которая у Java очень даже на высоте уже много лет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2013, 11:47:20 |
|
||
|
по какой причине ArrayList.get() реализовано через кастинг вниз?
|
|||
|---|---|---|---|
|
#18+
Добрый день, Blazkowicz! > Не совсем так. Накладные расходы могут возникнуть на этапе использования > коллекции. В "клиентском" коде. Это как? Код: sql 1. 2. 3. И где проблемы? > Тоже верно. Только дело не в "косяках", а в обратной совместимости > версий, которая у Java очень даже на высоте уже много лет. Не вижу разницы в обратной совместимости между E[]... и Object[]... -- Алексей JID: alxt@ya.ru Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2013, 12:33:39 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38152510&tid=2129977]: |
0ms |
get settings: |
21ms |
get forum list: |
18ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
47ms |
get topic data: |
15ms |
get forum data: |
5ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
| others: | 347ms |
| total: | 525ms |

| 0 / 0 |
