Juan-Carlos Gandhi (
juan_gandhi) wrote2010-03-09 03:36 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
а вот ещё джавный прикол
Беру строку (json), строю объект, потом обратно в строку превращаю - получается строка да не та. Меняет местами два атрибута. Если ещё раз применить - меняет обратно. Инверсия типа. Ну в принципе-то, теоретически-то, всё равно; но для тестов - pain in the ass.
Но откуда такая фигня? А вот откуда: это у меня джава-то маразматическая, 1.4 ME, там hashmap нету, а есть hashtable; но не уверен и насчёт hashmap уже. Короче, атрибуты сложены в hashtable, по именам. Т.к. hashtable, то номер слота определяется хашкодом атрибута (строка), по модулю размера. Первые два атрибута имеют одинаковый хашкод (по модулю размера таблицы, естественно). А так как каждый слот - (недавно изобретенный китайцами) linkedlist, то, понятное дело, добавляем в голову. А потом, когда листаем, то берём с головы ж. Ну и это, порядок меняется на обратный.
Ну как решить конкретно мою задачу понятно (инвариант должен быть инвариантен!), но в целом-то смешно, правда ведь!
Но откуда такая фигня? А вот откуда: это у меня джава-то маразматическая, 1.4 ME, там hashmap нету, а есть hashtable; но не уверен и насчёт hashmap уже. Короче, атрибуты сложены в hashtable, по именам. Т.к. hashtable, то номер слота определяется хашкодом атрибута (строка), по модулю размера. Первые два атрибута имеют одинаковый хашкод (по модулю размера таблицы, естественно). А так как каждый слот - (недавно изобретенный китайцами) linkedlist, то, понятное дело, добавляем в голову. А потом, когда листаем, то берём с головы ж. Ну и это, порядок меняется на обратный.
Ну как решить конкретно мою задачу понятно (инвариант должен быть инвариантен!), но в целом-то смешно, правда ведь!