如何获取类中多重性为0..*的属性的元素数量?
获取类中0..*多重性属性的元素数量的最优方式
对于UML中多重性为0..*的属性,本质上它对应的就是集合类型(比如Java的List/Set、C#的List<T>、Python的list等),这类集合原生就提供了高效获取元素数量的方法,完全不需要用迭代或者手动维护计数器这种麻烦且不优雅的方式。
核心解决方案:用集合内置的数量方法
直接调用集合类自带的获取长度/数量的方法即可,不同语言的示例如下:
- Java:
List<Order> orders = new ArrayList<>();→orders.size() - C#:
List<Order> orders = new List<Order>();→orders.Count - Python:
orders = []→len(orders)
这些方法的时间复杂度大多是O(1)(底层集合会维护一个计数器变量),比自己迭代遍历高效得多,而且是语言/框架原生实现,可靠性拉满。
为什么你的两种方法没必要
- 用
<<iterate>>构造:完全是舍近求远,迭代遍历的时间复杂度是O(n),而且代码冗余,明明有原生方法可以直接用。 - 手动维护计数器:不仅容易出错(比如删除元素时忘记更新计数器、并发场景下的线程安全问题),还重复造了轮子——集合本身已经在内部维护了元素数量,不需要你额外再做一遍。
空集合的情况
0..*允许属性为空集合,这时候上述方法会直接返回0,完美符合多重性的定义,不需要额外做空判断(当然如果业务需要判空可以单独处理,但获取数量不用)。
内容的提问来源于stack exchange,提问作者Jordan McBain
相关产品推荐
相关产品推荐

