Git Product home page Git Product logo

Comments (8)

Alexandro9911 avatar Alexandro9911 commented on August 27, 2024

Вроде все исправил

from prefixtree.

JohnKhandygo avatar JohnKhandygo commented on August 27, 2024

Ну почти.

  • Мне кажется, что использование TreeMap внутри Node необосновано. Подробнее смотри здесь.
  • В java принято использовать наиболее "жесткую" из возможных областей видимости (private > package private > public). Приватные методы, конечно, не подлежат тестированию в таком случае. У Вас в коде есть несколько мест, в которых видимость членов класса можно усилить.
  • Метод Node::sizeof реализован ужасно. Все, что Вы в нем хотели сделать, можно записать одной операцией.
  • Некоторые методы в Node существуют только потому, что Вы написали на них тест. Эти методы точно нужны?
  • Метод PrefixTrie::input работает неэффективно: Вы сначала делаете проход по всему слову, чтобы определить, есть ли оно уже в дереве (метод find) и, если нет, то делаете еще один проход по тому же слову. Можно избавиться от первого прохода?
  • А почему собственно, нельзя положить в дерево пустое слово?
  • Метод PrefixTrie::delete работает некорректно. Вы можете убедиться в этом как только исправите тесты в соответствии с моими рекомендациями.

from prefixtree.

Alexandro9911 avatar Alexandro9911 commented on August 27, 2024

доработал методы

from prefixtree.

JohnKhandygo avatar JohnKhandygo commented on August 27, 2024
  • С областями видимости Вам еще надо доразбираться.
  • delete все еще работает некорректно. Вы забыли про то, что у Вас теперь есть признак конца слова. Например, вот такой тест не будет работать:
    PrefixTrie a = new PrefixTrie();
    a.input("abcd");
    a.input("abcde");
    assertEquals(true, a.delete("abcd"));
    assertEquals(false, a.find("abcd"));
    

В остальном окей.

from prefixtree.

Alexandro9911 avatar Alexandro9911 commented on August 27, 2024

Delete починил.
По поводу области видимости, я правильно понял, что надо некоторые методы, которые являются служебными сделать приватными?

from prefixtree.

JohnKhandygo avatar JohnKhandygo commented on August 27, 2024

Да, общий принцип примерно следующий: представьте, что Вашу разработку используют как библиотеку, тогда

  • Публичными (public) являются методы, который должны быть доступны пользователю библотеки.
  • Видимость по умолчанию (package private) используются, когда некоторые методы переиспользуются ежду классами внутри одного пакета.
  • Приватная область видимости (private) используется когда метод должен быть доступен только внутри этого же класса.

Поля классов, как правило, делают приватными, доступ к ним (если он нужен) организуют при помощи геттеров и сеттеров. При этом, если значение поля никогда не меняется, то имеет смысл объявить его final для того, чтобы избежать некоторых дурацких ошибок. В этом случае для поля не существует сеттера.

Также стоит отметить, что приватные методы не покрывают тестами напрямую. Просто потому, что к ним нет доступа извне класса, в котором они определены.

from prefixtree.

Alexandro9911 avatar Alexandro9911 commented on August 27, 2024

вроде все

from prefixtree.

JohnKhandygo avatar JohnKhandygo commented on August 27, 2024

Окей. Вы вроде правильно уловили идею, но я бы все-таки сделал PrefixTrie::root и PrefixTrie::listNodes приватными.

from prefixtree.

Related Issues (8)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.