Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hashtable и метод values, Несовпадение с описанием 
:(
    Опции темы
SamuraiD
Дата 26.10.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Изучаю класс Hashtable. Попался метод класса values(), который возвращает все значения value таблицы в виде интерфейса Collection.
В API написано: 

Цитата

The Collection is backed by the Hashtable, so changes to the Hashtable are reflected in the Collection, and vice-versa.


то бишь, любые изменения в полученной коллекции приводят к модификации таблицы. Пишу пример:

Код

import java.util.*;

public class Test {

    public static void main(String[] args){
    
        Hashtable ht = new Hashtable();
        ht.put(1, "One");
        ht.put(2, "Two");
        ht.put(3, "Three");
        
        Vector vec = new Vector(ht.values()); //создаю вектор на основании элементов из коллекции значений value таблицы.
    
        for (int i=0; i!=vec.size(); ++i){
            vec.set(i, vec.get(i) + "*"); //изменяю каждый из элементов вектора
        }
        
        for (int i=0; i!=vec.size(); ++i){
            System.out.println(vec.get(i)); //вывожу все элементы вектора 
        }        
        
        System.out.println(ht.toString()); //вывожу все элементы таблицы
        
    }
}


Результат:

Three*
Two*
One*
{3 = Three, 2 = Two, 1 = One }

То есть видно, что значения в таблице не изменились...  smile Почему? Может, я неправильно передаю объект Collection в вектор? Тогда подскажите, как именно это можно сделать?




Это сообщение отредактировал(а) SamuraiD - 26.10.2007, 18:16
PM MAIL   Вверх
LSD
Дата 26.10.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



При создании вектор копирует в себя значения из коллекции, и естественно изменения в исходной коллекции не отображаются на векторе.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
SamuraiD
Дата 26.10.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Цитата

При создании вектор копирует в себя значения из коллекции, и естественно изменения в исходной коллекции не отображаются на векторе.


В принципе, я так и думал. Потому и задал вопрос, а как передать коллекцию в вектор таким образом, чтобы все изменения в нём отражались в таблице? Хоть какой-нибудь пример кода можно? А то мне наглядно это не проверить...


PM MAIL   Вверх
LSD
Дата 26.10.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Никак. Используй исходную коллекцию, зачем тебе вектор?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Kangaroo
Дата 26.10.2007, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Поставь между циклами
Код

ht.values().remove("One");
vec.remove(1);


и увидишь

Код

Three*
One*
{3=Three, 2=Two}


То есть, если ты прямо изменяешь ht.values() - работает, а если через Vector, то нет


--------------------
Lost....
PM MAIL MSN   Вверх
SamuraiD
Дата 26.10.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 11.6.2007

Репутация: нет
Всего: нет



Цитата

Используй исходную коллекцию


Так вот это я и хочу понять - как мне использовать исходную коллекцию??? Я взял вектор, потому что он реализует интерфейс Collection. Непосредственно объект типа Collection  создать же нельзя....
PM MAIL   Вверх
nornad
Дата 26.10.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1079
Регистрация: 16.2.2007
Где: в Караганде

Репутация: 16
Всего: 31



Цитата(SamuraiD @  26.10.2007,  21:37 Найти цитируемый пост)
Непосредственно объект типа Collection  создать же нельзя.... 

А зачем тебе его создавать? LSD предлагает тебе просто использовать ту коллекцию, которая у тебя уже есть.


--------------------
Три достоинства программиста: Леность, Нетерпение и Гордость
Ларри Уолл
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.