我实现了一个名为 EventSet 的类,其中包含一个带有自定义比较器的 TreeSet。comparator 应该与 equals 一致,因为在将元素添加到集合之前,TreeSet 似乎使用 compare 或 compareTo 进行所有需要的比较。我的应用程序需要读取包含一系列命令的文本文件,一个可能的命令是导入指定事件的文本文件。因此,一个假设的 event.txt 文件包含几行,例如“IN LOGIN 18082019 ab001 45.457, 9,181 A”,应用程序调用一个方法来解析字符串并将其转换为一个 Event 对象,该对象被添加到 EventSet 实例中。这里的问题很奇怪:一切正常,除非在命令文件中我尝试导入相同的事件。txt 文件两次,文件的第一行被转换为一个事件,并作为重复项插入到集合中,即使 equals 和 compare 说它是重复项。无论我如何更改它,这只会发生在文件的第一行。到目前为止,这是我的一些代码:
类事件集:
private static EventSet instance;
private TreeSet<Event> eventTree;
//costruttore
private EventSet() {
EventComparator comp = new EventComparator();
this.eventTree = new TreeSet<Event>(comp);
}
public static EventSet getInstance() {
if (instance == null) {
instance = new EventSet();
}
return instance;
}
public TreeSet<Event> getEventTree() {
return eventTree;
}
public void setEventTree(TreeSet<Event> eventTree) {
this.eventTree = eventTree;
}
public boolean add(Event e) {
return this.eventTree.add(e);
}
public boolean add(Set<Event> set) {
return this.eventTree.addAll(set);
}
类事件比较器:
public EventComparator() {
super();
}
@Override
public int compare(Event e1, Event e2) {
if(e1.equals(e2)) {
return 0;
} else if(e1.getTimestamp().compareTo(e2.getTimestamp())>=0) {
return 1;
} else {
return -1;
}
}
红糖糍粑
相关分类