Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Коллекции... Теоретический вопрос, Как же они сделали такую Hashtable 
:(
    Опции темы
sergejzr
Дата 5.1.2005, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Domestic Cat, как я понял из сорса, вот функция по которой расчитывается индекс в массиве:

Код

Object key;                                      //Это сам Object, который мы кладём в массив
int hash = key.hashCode();                     // тут берётся хэш
int index = (hash & 0x7FFFFFFF) % tab.length; //из за & он становится всегда положительным,                                                                        //а  из за % tab.length индекс никогда не покинет массив.


Осталось заглянуть в фунуцию hashCode() самого обьекта (интересен конечно же String )


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Domestic Cat
Дата 6.1.2005, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Хеш код стринга можно найти в доках :
Цитата
Returns a hash code for this string. The hash code for a String object is computed as

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]


using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, and ^ indicates exponentiation. (The hash value of the empty string is zero.)


/// Извиняюсь что развел такой Java оффтоп, что поделать - родственная технология smile Тем более
/// что существовать буду теперь на обеих форумах.


--------------------

PM   Вверх
[Last]Wizard
Дата 6.1.2005, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.7.2004
Где: Минск, Беларусь

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



Если никто не против, то немного о .NET расскажу smile

Алгоритмы хэш-кодов:
String: алгоритм строго не определен, в MSDN пишут так:
Цитата
The behavior of GetHashCode is dependent on its implementation, which might change from one version of the common language runtime to another. A reason why this might happen is to improve the performance of GetHashCode.
Подозреваю, что реализация приблизительно такая как и в Java.
Int32: хэш целого числа равен самому числу.
Int16: (((Int32) X) | (X << 0x10));
Int64: (((Int32) X) ^ ((Int32) (X >> 0x20)));
Char: (X | (X << 0x10));
Boolean: 1 если true и 0 если false;
DateTime: ticks.GetHashCode();
Single: Адрес памяти, приведенный к Int32;
Double: Хэш адреса в памяти (Int64);
Guid: ((a ^ ((b << 0x10) | ((ushort) c))) ^ ((f << 0x18) | k));
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

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


 




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


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

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