Комментарии (9)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Rustam Backend Developer
25 июля 2020, 10:58
Rustam Backend Developer
24 июля 2020, 15:29
------------------ Как работают equals() и hashcode(): если мы их не переопределяем в своем классе для сравнения двух объектов, то их реализация берется джавой из класса Object, где эти методы проверяют два объекта на равенство таким образом: сравниваются участи памяти, в которых лежат объекты. Если это один и тот же участок, значит объекты равны. В противном случае объекты не равны. В нашем случае в этой задаче объекты при такой реализации equals() и hashcode() всегда не равны. Ведь мы создаем новый объект и в него записываем значения полей из файла. ------------------ Почему для сравнения объектов нужны именно два метода equals() и hashcode() ? Почему не ограничиться только, скажем, equals()? Ответ - для скорости сравнения. Дело в том, что hashcode() - функция хэширования - возвращает int. Процессор очень легко и быстро выполняет простые математические и логические действия над примитивами. Но хэш не всегда разный, как нас учили на этом курсе. Бывают коллизии (из-за плохо продуманной математической формулы создания уникального хэша, или теоретически просто из-за того, что объектов может быть больше, чем вмещает в себя int). Логика контракта hashcode() - equals() такова: 1. Сравниваем объекты по hashcode(). Если хэши разные, то объекты точно разные. К equals() уже и не прибегаем. 2. Если хэши одинаковые, то это либо коллизия хэшей, либо объекты одинаковые. Тут запускается equals(). 3. equals() работает медленнее, потому что он сравнивает все значимые поля объектов по-очереди (или выполняет ту логику, которую мы заложили в equals() при переопределении этого метода в своем классе). И тут уже если equals() показывает true, то объекты равны. Если false - не равны. ------------------- Ну а все ошибки, допущенные в задаче в методах equals() и hashcode() , ранее уже построчно были описаны.
Rustam Backend Developer
23 июля 2020, 11:59
Нужен объект Properties Properties prop = new Properties(); Считать из потока так: prop.load(inputStream); Properties -> Map в одну строчку: prop.forEach( (k, v) -> properties.put( (String)k, (String)v) ); Map -> Properties prop.putAll(properties); Properties-> outputStream prop.store(outputStream, "");
Rustam Backend Developer
9 июля 2020, 23:18
Rustam Backend Developer
27 июня 2020, 19:15
Rustam Backend Developer
8 июня 2020, 13:54
СТРОЧНОЕ чтение из фала: 1) используйте следующую конструкцию для возможности считывать строки из файла: BufferedReader fileReader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName))); 2) синтаксис цикла, следующий: while (fileReader.ready()){ int i = Integer.parseInt(fileReader.readLine()); }
Rustam Backend Developer
7 июня 2020, 22:00
Rustam Backend Developer
31 мая 2020, 17:10
Rustam Backend Developer
24 мая 2020, 12:43