【问题标题】:A Collection that uses an array for its key/type使用数组作为键/类型的集合
【发布时间】:2013-10-09 16:08:49
【问题描述】:

我的程序必须在线程之间传递大量数组。我想要一个可以接受数组的集合,然后 contains 方法将指定 Set/Map 是否包含数组(即它是重复的还是已被线程处理)。我假设这个集合必须使用Arrays.equals(a1, a2),因为Object.equals() 方法will not work on arrays。是否可以编写一个像这样工作的集合,或者在从 int[] 自动装箱到 Integer[] 时它会失败吗?

【问题讨论】:

    标签: java arrays dictionary collections set


    【解决方案1】:

    Array 使用一个包装器,它会覆盖hashCode()equals(),如Arrays.asList()

    顺便说一句,您应该避免使用数组并尽可能选择集合。我还建议您将不可变数据结构用于多线程。在 Set 中使用可变对象或作为 Map 的键无论如何都是一个糟糕的主意。

    【讨论】:

    • 如果可以的话,我强烈建议将该 hashCode 作为变量存储在该实例中。每次需要散列时循环遍历元素可能会非常昂贵。
    • 包装器是指Array 的扩展吗?因为这是最后一堂课。
    • 另外,澄清一下我确实想使用一个集合,但是像 Set 或 Map 之类的东西。
    • @NobleUplift Wrapper 表示包装类。 IE。在将数组放入集合之前,您总是将数组包装在此类中。 IE。而不是使用Set<Integer[]>,而是通过使用Arrays.asList() 将数组转换为Lists 来手动构建Set<List<Integer>>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    相关资源
    最近更新 更多