TreeMap в Jаva
17 отговора
0 прегледа
TreeMap в Jаva
Имате клас MyKey, който представлява custom key за TreeMap в Java.
Два ключа са еднакви ако имат еднакви стоиности на променливите foo,bar, foobar. По четвъртата променлива (реално число) се определя позицията им в мапа - колкото по-голяма толкова по-нагоре.
Бележка: hashCode() и equals() не се предефинират за TreeMap (тва да си призная не го знаех, но сложих един принт в тях и не се викаха, гоогле потвърди).
Вижте тестовия код и резултата по-долу, ако някой ми каже защо резултата е такъв ще му дам 1 бира.
class MyKey implements Comparable<MyKey>, Serializable {
private String foo;
private String bar;
private String foobar;
private double barfoo;
@Override
public int compareTo(MyKey o) {
if (this.foo.equals(o.getFoo()) &&
this.bar.equals(o.getBar()) &&
this.foobar.equals(o.getFoobar())) {
return 0;
}
if (this.barfoo >= o.getBarfoo()) {
return 1;
} else {
return -1;
}
}
// geters and setters
}
TreeMap<МъKey, DummyObject> hash = new TreeMap<MyKey, DummyObject>();
MyKey key = new MyKey();
key.setFoo("foo");
key.setBar("bar");
key.setFoobar("foobar");
key.setBarfoo(0);
hash.put(key, new DummyObject());
MyKey key1 = new MyKey();
key1.setFoo("foo");
key1.setBar("bar1");
key1.setFoobar("foobar");
key1.setBarfoo(0);
hash.put(key1, new DummyObject());
MyKey key2 = new MyKey();
key2.setFoo("foo");
key2.setBar("bar2");
key2.setFoobar("foobar");
key2.setBarfoo(0);
hash.put(key2, new DummyObject());
for (MyKey k : hash.keySet()) {
DummyObject d = hash.get(k);
System.out.println(d == null);
}
// rezult
true
false
false
Два ключа са еднакви ако имат еднакви стоиности на променливите foo,bar, foobar. По четвъртата променлива (реално число) се определя позицията им в мапа - колкото по-голяма толкова по-нагоре.
Бележка: hashCode() и equals() не се предефинират за TreeMap (тва да си призная не го знаех, но сложих един принт в тях и не се викаха, гоогле потвърди).
Вижте тестовия код и резултата по-долу, ако някой ми каже защо резултата е такъв ще му дам 1 бира.
class MyKey implements Comparable<MyKey>, Serializable {
private String foo;
private String bar;
private String foobar;
private double barfoo;
@Override
public int compareTo(MyKey o) {
if (this.foo.equals(o.getFoo()) &&
this.bar.equals(o.getBar()) &&
this.foobar.equals(o.getFoobar())) {
return 0;
}
if (this.barfoo >= o.getBarfoo()) {
return 1;
} else {
return -1;
}
}
// geters and setters
}
TreeMap<МъKey, DummyObject> hash = new TreeMap<MyKey, DummyObject>();
MyKey key = new MyKey();
key.setFoo("foo");
key.setBar("bar");
key.setFoobar("foobar");
key.setBarfoo(0);
hash.put(key, new DummyObject());
MyKey key1 = new MyKey();
key1.setFoo("foo");
key1.setBar("bar1");
key1.setFoobar("foobar");
key1.setBarfoo(0);
hash.put(key1, new DummyObject());
MyKey key2 = new MyKey();
key2.setFoo("foo");
key2.setBar("bar2");
key2.setFoobar("foobar");
key2.setBarfoo(0);
hash.put(key2, new DummyObject());
for (MyKey k : hash.keySet()) {
DummyObject d = hash.get(k);
System.out.println(d == null);
}
// rezult
true
false
false
Редактирано от moreol на
Re: TreeMap в Jаva
Верно ли? Ако имаш нещо да казваш казвай, не сери без тоалетна хартия
Относно логиката, казах че 2 обекта са еднакви когато стоиностите на техните foo, bar, foobar са равни и са различни ако някои от стоиностите им не съвпадат.
Относно логиката, казах че 2 обекта са еднакви когато стоиностите на техните foo, bar, foobar са равни и са различни ако някои от стоиностите им не съвпадат.
Re: TreeMap в Jаva
Май си прав. В теста barfoo навсякъде е 0.0, пробвах го с различни числа и работи. Но това не ми помага да си реша проблема.
Re: TreeMap в Jаva
Кофти ти е метода за сравнение.
Когато добавяш третия път, трии мапа те пита един път:
бар2 и бар как са : метода вика бар2 е по-голямо
после, пак те пита:
бар и бар2 как са : метода вика бар е по-голямо
Е, ти го правих хахав тоз трии мап, к'во искаш после от него :)
Пробвах го и на ИБМ-ска жава, и там се оака ...
Когато добавяш третия път, трии мапа те пита един път:
бар2 и бар как са : метода вика бар2 е по-голямо
после, пак те пита:
бар и бар2 как са : метода вика бар е по-голямо
Е, ти го правих хахав тоз трии мап, к'во искаш после от него :)
Пробвах го и на ИБМ-ска жава, и там се оака ...
Re: TreeMap в Jаva
ако не е тайна що не трасираш сорса на Jаva да видиш кво става?
нали голяма част от сорса на Jаva го има, на TreeMap няма ли го?
no pain, no gain
нали голяма част от сорса на Jаva го има, на TreeMap няма ли го?
no pain, no gain
Re: TreeMap в Jаva
Тоя проблем го има на всички езици - .НЕТ, Ц++, всеки ТрееМап иска СВО, иначе то ще стане някаква лудница да валидираш при всяко внасяне.
Re: TreeMap в Jаva
То тва ясно, отделно, че в случая е дори по зле:
а < б, но и б < а
Въпросът е, защо му стана толкова "лошо" на мапа, че си загуби първия дъми обект? Кии има, обект няма !?!
а < б, но и б < а
Въпросът е, защо му стана толкова "лошо" на мапа, че си загуби първия дъми обект? Кии има, обект няма !?!
Re: TreeMap в Jаva
В Ц++ направо крашва, няма какво да се оплакваш. Абсолютно нормално е да върне нил. Вкарваш един елемент в грешния клон, после при търсенето завива на другата(правилната) страна и няма никой. И ключа и стойноста са там, само че ключа идва от итерация а стойноста от двойчното търсене, което е развалено.
Re: TreeMap в Jаva
Виц, бтв току що ми просветна..... превключвайки по каналите попаднах на проф. Вучков....... знаех си, че демагогията ти ми напомня на някой !!!







Re: TreeMap в Jаva
Undefined behaviour, unless you follow certain rules? Надеждата, че протокол може да се енфорсне със статик типове е много забавна иначе :) Не, че не опитват даже сериозни хора
Simplicity is the essence of happiness. -- Cedric Bledsoe
Simplicity is the essence of happiness. -- Cedric Bledsoe
Re: TreeMap в Jаva
пак си затънал в илюзии
аз съм обикновен зрител дето пише между другото общи приказки във форум за общи приказки,
нито водя предаване по тв нито се правя на професор, ти си по близо до проф. Вучков щото се правиш на голяма работа.
по едно време ми предлагаше съмнителни инвестиции, след тва лаеше като бясно куче, сега се хилиш като луд ... мяташ се като риба на сухо -> очевидно няма начин да ме разбереш за това зарежи опитите преди да изпушиш напълно, насочи си усилията към някоя лесна жертва като гуро на която може да промиваш мозъка без проблем
no pain, no gain
аз съм обикновен зрител дето пише между другото общи приказки във форум за общи приказки,
нито водя предаване по тв нито се правя на професор, ти си по близо до проф. Вучков щото се правиш на голяма работа.
по едно време ми предлагаше съмнителни инвестиции, след тва лаеше като бясно куче, сега се хилиш като луд ... мяташ се като риба на сухо -> очевидно няма начин да ме разбереш за това зарежи опитите преди да изпушиш напълно, насочи си усилията към някоя лесна жертва като гуро на която може да промиваш мозъка без проблем
no pain, no gain
Re: TreeMap в Jаva
xaxaxaxaxa
предлагам съмнителни инвестиции ? ХАХАХАХАХА ох пич, ще ме умориш просто
предлагам съмнителни инвестиции ? ХАХАХАХАХА ох пич, ще ме умориш просто
Re: TreeMap в Jаva
бтв вече ми е смешно, защото разбрах, че в теб се е вселил духа на Професора, някак как да приема на сериозно дори и 1 твоя дума вече 
