Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / HashSet. Интересно получается. / 4 сообщений из 4, страница 1 из 1
12.12.2006, 00:05:08
    #34191874
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet. Интересно получается.
Разбирался с колекциями - в голову пришла интересная мысль. Получается, то если в HaspMap занести объект класса, затем изменить значение одного из его полей (чтобы hashcode изменился) и считай элемент потерян. Выводы сделаны из результатов выполнения кода приведенного ниже и анализа значений в дебагере. Получается что HashSet не отслеживает изменение объекта и не пересчитывает хотя в принципе логично... Поправте если я не прав, плз.

Код: 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.
41.
42.
 package  Pack;

 import  java.util.HashSet;
 import  java.util.Iterator;

 class  Cat{
	 int  x;
	 public  Cat( int  i) {
		x =i;
	}

	@Override
	 public   boolean  equals(Object obj) {
		 if  (obj  instanceof  Cat){
			 if  (((Cat)obj).x ==  this .x)
				  return  true;
		}
		 return  false;
	}

	@Override
	 public   int  hashCode() {
		 return  x* 5 ;
	}
	
}

 public   class  Dog {
	 public   static   void  main(String[] args) {
		HashSet hs =  new  HashSet( 4 );

		hs.add( new  Cat( 1 ));
		hs.add( new  Cat( 2 ));
		hs.add( new  Cat( 3 ));
		Iterator it = hs.iterator();
		Cat hsСat = (Cat) it.next();
		
		hsСat.x= 10 ;
		 if  (hs.contains(hsСat)) {
			System.out.println ("Contains");
		}
	}
}
...
Рейтинг: 0 / 0
12.12.2006, 09:09:54
    #34192140
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet. Интересно получается.
так точно. только это можно было в книжке прочитать. такая тупая реализация имеет преимущество - эффективность. если вам нужна перетасовка - пишите сами. да и вобще в Java с observable коллекциями напряг (вроде в apache common collections должны были появиться), в отличии от .netа...
...
Рейтинг: 0 / 0
12.12.2006, 10:46:13
    #34192404
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet. Интересно получается.
exppтак точно. только это можно было в книжке прочитать. такая тупая реализация имеет преимущество - эффективность. если вам нужна перетасовка - пишите сами. да и вобще в Java с observable коллекциями напряг (вроде в apache common collections должны были появиться), в отличии от .netа...
спасибо.
...
Рейтинг: 0 / 0
12.12.2006, 11:27:14
    #34192579
Guest12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HashSet. Интересно получается.
В Doc'е написано:

The general contract of hashCode is:

Whenever it is invoked on the same object more than once during an execution of a Java application, the hashCode method must consistently return the same integer, provided no information used in equals comparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application.

Т.е. hashCode по идее должна базироваться только на неизменяемых данных объекта
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / HashSet. Интересно получается. / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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