java中的n维结构/地图

时间:2015-05-04 17:50:44

标签: java arrays

我需要在java中使用n维结构(map)

我们假设我们有一家动物商店,我们希望保持某种动物的最低价格。

让我们说我们的标准是:

  • 类型:猫,狗,任何。
  • 年龄:1,2,任何。
  • 颜色:棕色,红色,任意。
  • 性别:男,女,任何。

结果价格应该是所有相关配置中最低的。

例如分钟。价格为

  • 猫是20,
  • 1岁是:10,
  • 布朗猫:25,
  • 其他:30;

所以棕色,1岁,狗,女性的结果价格是10.

对于黑人,2岁,猫,男性,20岁。 等。

那有什么结构吗?如果没有,那么实施它的最佳方式是什么。

3 个答案:

答案 0 :(得分:2)

在我第一次回答这个问题时,我错过了将价格分配给属性组合的要求。这个答案应该很好地处理这个部分。

以某种方式为每个属性建模,以便没有两个属性具有相同的值。因此,例如,如果您有尺寸眼睛颜色和毛发颜色,不要只使用字符串,因为棕色可能属于它们中的任何一个。我假设有一个共同的接口'属性'没有这样的接口存在你可能会使用'对象'。所有这些类都需要正确实现'equals'

现在创建一个类来模拟属性组合及其价格:(以下是没有IDE或编译器编写的。错误被认为是读者的故意培训)

public class AttributeCombination{
    private final Set<Attribute> attributes;

    public AttributeCombination(Set<Attribute> attributes){
        this.attributes = attributes;
    }

    public boolean matches(Set<Attribute> attributes){
        for(a : this.attributes){
            if (!attributes.contains(a))
                return false;
        }
        return true;
    }
}

现在有一个正确排序的类,将属性与价格相结合

public class AttributeWithPrice implements Comparable<AttributeWithPrice> {
    private final AttributeCombination attributes;
    private final int price;

    // add the obvious constructor or switch to scala

    public int compareTo(AttributeWithPrice other){
        return this.price - other.price // or the other way round, I can never remember
    }
}

现在你可以创建一个AttributeWithPrice对象列表,对它进行排序,所以小价格先来,然后迭代它,直到你找到匹配的元素。

答案 1 :(得分:1)

只需为每个“维度”使用Map和不同的类(可能是枚举)。

维度成为地图的关键(键类型必须是常见的超类型,因此可能是对象),值类型将是价格(从您的示例判断为int)。

要确定价格,请根据每个维度选择价格并使用最小值。完成。

答案 2 :(得分:1)

我认为您不能仅使用地图或一小组地图,因为您要对多个条件的组合定义限制。我没有看到确定使用的适当密钥的方法,因为您没有在多维空间中定义点的限制,而是根据可能重叠的各种形状的空间。你的ANY在功能上不是该维度上的一个独特点,而是涵盖所有其他定义点的范围,因此你不能对它进行简单的相等比较,这就是Map键所需要的。

我会将所有限制保留在List中并针对您想要找到最低价格的宠物对象进行检查。制作一个Restriction课程并为其提供appliesTo(Pet pet)方法。

如果您最终遇到大量限制,如果您为每个条件引入了“通配符”的概念,则可以使用Maps在其上构建“索引”。然后,您可以构建映射每个条件的每个值的映射,包括可以应用于具有该条件的任何值的宠物的所有条件的“通配符”,以及可能适用于该条件的所有最低价格条件的列表。但是,这将是更多的代码,除非你的大部分限制

,否则可能不会给你太多的加速