Comments (8)
Вроде все исправил
from prefixtree.
Ну почти.
- Мне кажется, что использование
TreeMap
внутриNode
необосновано. Подробнее смотри здесь. - В java принято использовать наиболее "жесткую" из возможных областей видимости (private > package private > public). Приватные методы, конечно, не подлежат тестированию в таком случае. У Вас в коде есть несколько мест, в которых видимость членов класса можно усилить.
- Метод
Node::sizeof
реализован ужасно. Все, что Вы в нем хотели сделать, можно записать одной операцией. - Некоторые методы в
Node
существуют только потому, что Вы написали на них тест. Эти методы точно нужны? - Метод
PrefixTrie::input
работает неэффективно: Вы сначала делаете проход по всему слову, чтобы определить, есть ли оно уже в дереве (методfind
) и, если нет, то делаете еще один проход по тому же слову. Можно избавиться от первого прохода? - А почему собственно, нельзя положить в дерево пустое слово?
- Метод
PrefixTrie::delete
работает некорректно. Вы можете убедиться в этом как только исправите тесты в соответствии с моими рекомендациями.
from prefixtree.
доработал методы
from prefixtree.
- С областями видимости Вам еще надо доразбираться.
-
delete
все еще работает некорректно. Вы забыли про то, что у Вас теперь есть признак конца слова. Например, вот такой тест не будет работать:PrefixTrie a = new PrefixTrie(); a.input("abcd"); a.input("abcde"); assertEquals(true, a.delete("abcd")); assertEquals(false, a.find("abcd"));
В остальном окей.
from prefixtree.
Delete
починил.
По поводу области видимости, я правильно понял, что надо некоторые методы, которые являются служебными сделать приватными?
from prefixtree.
Да, общий принцип примерно следующий: представьте, что Вашу разработку используют как библиотеку, тогда
- Публичными (
public
) являются методы, который должны быть доступны пользователю библотеки. - Видимость по умолчанию (package private) используются, когда некоторые методы переиспользуются ежду классами внутри одного пакета.
- Приватная область видимости (
private
) используется когда метод должен быть доступен только внутри этого же класса.
Поля классов, как правило, делают приватными, доступ к ним (если он нужен) организуют при помощи геттеров и сеттеров. При этом, если значение поля никогда не меняется, то имеет смысл объявить его final
для того, чтобы избежать некоторых дурацких ошибок. В этом случае для поля не существует сеттера.
Также стоит отметить, что приватные методы не покрывают тестами напрямую. Просто потому, что к ним нет доступа извне класса, в котором они определены.
from prefixtree.
вроде все
from prefixtree.
Окей. Вы вроде правильно уловили идею, но я бы все-таки сделал PrefixTrie::root
и PrefixTrie::listNodes
приватными.
from prefixtree.
Related Issues (8)
- Add properly configured .gitignore file HOT 10
- Add Javadoc HOT 2
- Use consistent code style/formatting HOT 2
- Add tests HOT 6
- Remove unused files
- Use common project structure HOT 6
- Task 2.0 HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from prefixtree.