powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / коллекции
14 сообщений из 14, страница 1 из 1
коллекции
    #34617580
parrish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите, пожалуйста, как типизировать коллекции
...
Рейтинг: 0 / 0
коллекции
    #34617630
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generic'и
авторimport java.util.Hashtable;

class Test {
public static void main(String[] args) {
Hashtable<Integer, String> h = new Hashtable<Integer, String>();
h.put(new Integer(0), "value");
...
}
}
или переопределять коллекции и instanceof. Проверять типы объектов.
...
Рейтинг: 0 / 0
коллекции
    #34617638
parrish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
гмм...а можете, пожалуйста, без кода - в теории объяснить, что делать
...
Рейтинг: 0 / 0
коллекции
    #34617673
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вам нужно переопределить методы get, add и вставить в него код проверки типа объекта который должна хранить коллекция. Чтобы этого не делать создали Generic'и.
...
Рейтинг: 0 / 0
коллекции
    #34617791
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНвам нужно переопределить методы get, add и вставить в него код проверки типа объекта который должна хранить коллекция. Чтобы этого не делать создали Generic'и.

имхо в корне неверно. <Generics> и java.util.Collections.checkedXxx() два совершенно отличных друг от друга решения. (и конечно же руками ничего писать не надо)
...
Рейтинг: 0 / 0
коллекции
    #34617985
alx3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
expp:
Ну структурное различие понятно, в случае <Generics> в рантайме коллекции будут не типизированные. А вот в скорости от этого будет плюс или минус?
...
Рейтинг: 0 / 0
коллекции
    #34618024
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторимхо в корне неверно. <Generics> и java.util.Collections.checkedXxx() два совершенно отличных друг от друга решения. (и конечно же руками ничего писать не надо)
Поясните...
Как вы хотите создать типизированную коллекцию в 1.4 ?

автордва совершенно отличных друг от друга решения.
Ок. Для чего нудны джинерики?
...
Рейтинг: 0 / 0
коллекции
    #34618029
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx3expp:
Ну структурное различие понятно, в случае <Generics> в рантайме коллекции будут не типизированные. А вот в скорости от этого будет плюс или минус?
Монопенисуально. Сами ведь ответили: "в рантайме коллекции будут не типизированные".
...
Рейтинг: 0 / 0
коллекции
    #34618109
alx3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timm
Хм, странно.
Вроде у дженериков "compile-time (static) type checking", а CheckedCollection это "dynamically typesafe view of the specified collection".
Наверное динамическая проверка должна замедлять работу?
...
Рейтинг: 0 / 0
коллекции
    #34618176
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx3Timm
Хм, странно.
Вроде у дженериков "compile-time (static) type checking", а CheckedCollection это "dynamically typesafe view of the specified collection".
Наверное динамическая проверка должна замедлять работу?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
 import  java.util.*;
 public   class  testColl 
{
     public   static   void  main(String[] args) 
    {
        Map<String, String> t1 =  new  HashMap<String, String>();

        t1.put("test", "test");

        String s = t1.get("test"); // line num = 10

        Map t2 =  new  HashMap();

        t2.put("test", "test");

        s = (String) t2.get("test"); // line num = 16
    }
}
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 public   static   void  main(java.lang.String[]);
  LineNumberTable:
   line  6 :  0 
   line  8 :  8 
   line  10 :  19 
   line  12 :  31 
   line  14 :  39 
   line  16 :  50 
   line  17 :  62 

  Code:
   Stack= 3 , Locals= 4 , Args_size= 1 
    0 :    new      # 2 ; //class java/util/HashMap
    3 :   dup
    4 :   invokespecial   # 3 ; //Method java/util/HashMap."<init>":()V
    7 :   astore_1
    8 :   aload_1
    9 :   ldc     # 4 ; //String test
    11 :  ldc     # 4 ; //String test
    13 :  invokeinterface # 5 ,   3 ; //InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    18 :  pop
    19 :  aload_1
    20 :  ldc     # 4 ; //String test
    22 :  invokeinterface # 6 ,   2 ; //InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
    27 :  checkcast       # 7 ; //class java/lang/String
    30 :  astore_2
    31 :   new      # 2 ; //class java/util/HashMap
    34 :  dup
    35 :  invokespecial   # 3 ; //Method java/util/HashMap."<init>":()V
    38 :  astore_3
    39 :  aload_3
    40 :  ldc     # 4 ; //String test
    42 :  ldc     # 4 ; //String test
    44 :  invokeinterface # 5 ,   3 ; //InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    49 :  pop
    50 :  aload_3
    51 :  ldc     # 4 ; //String test
    53 :  invokeinterface # 6 ,   2 ; //InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
    58 :  checkcast       # 7 ; //class java/lang/String
    61 :  astore_2
    62 :   return 
...
Рейтинг: 0 / 0
коллекции
    #34618328
alx3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как и ожидалось, байткод одинаковый.
А если вместо
Код: plaintext
Map<String, String> t1 =  new  HashMap<String, String>();
написать
Код: plaintext
Map<String, String> t1 = Collections.checkedCollection( new  HashMap<String, String>(), String. class );
тогда согласно доке проверка должна стать динамической.
Интересно стало посмотреть, что изменится; приду с работы поиграюсь с коллекциями, посмотрю checkedCollection поподробнее.
Подскажите, чем вы байткод открываете?
...
Рейтинг: 0 / 0
коллекции
    #34618442
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alx3Как и ожидалось, байткод одинаковый.
А если вместо
Код: plaintext
Map<String, String> t1 =  new  HashMap<String, String>();
написать
Код: plaintext
Map<String, String> t1 = Collections.checkedCollection( new  HashMap<String, String>(), String. class );
тогда согласно доке проверка должна стать динамической.
Интересно стало посмотреть, что изменится; приду с работы поиграюсь с коллекциями, посмотрю checkedCollection поподробнее.
Подскажите, чем вы байткод открываете?
1. Вы путаете понятия. Collections.checked* нужны, в первую очередь, для отладки старого кода, написанного без помощи compile-time type checking. С байт кодом ничего не произойдет. Просто коллекция обернется в "правильную", которая будет кидать ClassCastException сразу же при добавлении, а не в момент собственно каста.
2. стандартно, javap.
...
Рейтинг: 0 / 0
коллекции
    #34618532
alx3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Теперь стало более понятно.
...
Рейтинг: 0 / 0
коллекции
    #34618730
parrish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
да, спасибо!!мне теперь тоже)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / коллекции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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