HTC M8 (6.0.1):TreeSet<Long>.contains(Long) 抛出 class 强制转换异常:"cannot cast Double to Long"

HTC M8 (6.0.1): TreeSet<Long>.contains(Long) throws class cast exception: "cannot cast Double to Long"

我们刚刚收到一份崩溃报告,老实说我不明白,我什至不确定这是否是一个好问题...但我想不出任何东西。

我有以下代码:

public class LeisureEventSelectedCategories {
    private Set<Long> ids = new TreeSet<>();

    public boolean contains(Long id) {
        if (id == null) {
            return false;
        }
        return ids.contains(id);
    }

return ids.contains(id) 行因以下异常而崩溃:

java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Long
    at java.lang.Long.compareTo(Long.java)
    at java.util.TreeMap.find(TreeMap.java)
    at java.util.TreeMap.findByObject(TreeMap.java)
    at java.util.TreeMap.containsKey(TreeMap.java)
    at java.util.TreeSet.contains(TreeSet.java)
    at com.acme.b.a.d.a(LeisureEventSelectedCategories.java:50)

我在这里收到的 Long 来自 Map<String, Long>.

leisureEventSelectedCategories.contains(eventCategoryNameToEventId.get(categoryName)) || leisurePlaceSelectedCategories.contains(placeCategoryNameToPlaceId.get(categoryName)),

在哪里

Map<String, Long> placeCategoryNameToPlaceId = new LinkedHashMap<>();
Map<String, Long> eventCategoryNameToEventId = new LinkedHashMap<>();

除了用 HashSet 替换 TreeSet 并在我需要的地方使用 Collections.sort() 之外,还有什么可能导致这种情况以及我以后应该如何避免这种情况?

编辑:

选择来自服务器的所有项目后 leisureEventSelectedCategories 中的值图像:

eventCategoryNameToPlaceId

中值的图像

最后,我们只是将其替换为LinkedHashSet<Long>,崩溃就消失了。