【问题标题】:What is the order of struct iteration?结构迭代的顺序是什么?
【发布时间】:2015-12-05 12:54:48
【问题描述】:

我正在使用 Coldfusion 10,但我对任何版本的答案都感兴趣。

众所周知,Coldfusion 中的结构是无序的(例如 Stop ColdFusion from sorting my structs/arrays),您不应依赖任何特定的迭代顺序。但是,键显然是按 some 顺序迭代的,即使它不是排序顺序或插入顺序。订单稳定可靠吗?是某种底层 Java 类型的顺序吗?

我要强调的是,我不打算依赖这个,但我还是想知道。

【问题讨论】:

  • CF 结构曾经被实现为 java.util.Hashtable 的,但现在是一个内部/专有类 Coldfusion.util.CaseInsensitiveMap。我的猜测是它是相似的,并且订单基于hash value, as with your typical HashMap/Hashtable。我认为这些信息对您没有任何用处,除了智力练习;-) 如果您真的 需要“排序”结构,请使用可用的 java 类之一。在大多数方面,它们的行为就像一个 CF 结构。

标签: coldfusion coldfusion-10


【解决方案1】:

像 ColdFusion 的结构这样的哈希映射使用键的哈希。哈希在存储桶中进行管理,由于内存地址映射不是线性的,因此不保证随时间推移的顺序。

如果您需要 ColdFusion 中的有序结构,您可以使用任何实现 Map interface 并满足您要求的 Java 类。 LinkedHashMap 是插入顺序的示例。这些将适用于 ColdFusion,但请注意区分大小写和一般性能损失。

关于最佳实践:通过使用带有有序键的数组来避免使用有序结构(请记住,ColdFusion 中也有 structSort())。在提供 RESTful 服务时,使用 LinkedHashMap 的唯一“好”理由是 serializeJSON(),因为顺序和区分大小写很重要。

【讨论】:

  • 注意区分大小写 ...而且与 CF 不同,java 对象有时也是类型敏感的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
相关资源
最近更新 更多