3 回答
TA贡献1860条经验 获得超9个赞
迭代器:
可能是最简单的解决方案。由于 java 在循环中使用迭代器foreach,因此性能是相同的。
For (NoteBook noteBook: noteBooks) {
Iterator<Note> it = noteBooks.getNoteList().iterator();
while (it.hasNext()) {
Note note = it.next();
if (note.getCategory().equals(someString)) {
it.remove();
}
}
}
SQL:
这将是最佳的。然而,即使使用轻量级的东西,例如 H2 或 SQLite,也需要重构。在非常轻量级的应用程序中也不是一个选项。
高效:
如果您只按类别或名称搜索,您可以使用 2 个地图:
Map<String, Note> notesByCategory;
Map<String, Note> notesBytName
这将需要O(n)内存来存储映射,但会及时进行非常高效的查找O(1)(与当前的O(n)相比)。我会避免这种解决方案,因为很容易在笔记内容和地图之间实现不一致的状态。
编辑:
var newNoteNames = newList.stream().map(Note::getName).collect(Collectors.toSet());
var oldNoteNames = noteBooks.stream().flatMap(Notebook::getNodeList).map(Note::getName).collect(Collectors.toSet());
var removedNames = oldNoteNames.removeAll(newNoteNames);
for (var removedName : removedNames) {
for (NoteBook noteBook: noteBooks) {
Iterator<Note> it = noteBooks.getNoteList().iterator();
while (it.hasNext()) {
Note note = it.next();
if (note.getName().contains(removedName)) {
it.remove();
}
}
}
}
TA贡献1803条经验 获得超3个赞
为什么不将笔记本信息存储在 note 类中呢?
public class Note {
private NoteBook sourceNoteBook;
private String name;
private String category;
private String details;
public Note(NoteBook sourceNoteBook,String name, String category, String details) {
this.sourceNoteBook = sourceNoteBook;
this.name = name;
this.category = category;
this.details = details;
}
}
需要注意的每个数据操作都会影响存储它的笔记本
TA贡献1802条经验 获得超6个赞
当键是笔记并且值是笔记本时,您可以创建一个地图 keySet 将返回给用户,一旦他选择了该键,您就有了知道要从哪个笔记本中删除的值,并且您有可以删除该笔记本的键笔记。这是你的意思吗?
添加回答
举报