【问题标题】:Replacing all .equals(string) with == (int)用 == (int) 替换所有 .equals(string)
【发布时间】:2020-01-01 21:05:19
【问题描述】:

我的 java 项目使用具有 ArrayList 字符串的对象。然而,这些字符串是预先确定的。只有 47 个左右可能的字符串。现在我想检查一个ArrayList 是否包含某个String

我目前通过.equals() 执行此操作,但我认为这很慢,所以我想切换到== (int)。然而,手动将所有.equals() 转换为== (int) 是相当烦人的。特别是当事情必须再次改变时。

那么有没有一种工具可以将所有这些 .equals() 转换为 == (int) 以获得一组字符串?

【问题讨论】:

  • 为什么不使用某种形式的散列集?
  • 我可能理解错了这个问题,但是如果你想检查一个数组列表是否有某个字符串,你不能只使用为 java 中的列表提供的 contains 方法吗?
  • 您好 Stew,我认为您对编辑器的想法取代了所有功能。但是,我认为按照您的计划去做并不是一个好主意。 .equals 方法与身份“=”不同是有原因的。有很多方法可以测试数组是否包含值。有关示例,请参阅 mkyong.com/java/java-check-if-array-contains-a-certain-value

标签: java inequality


【解决方案1】:

提防过早的优化(这是万恶之源)。有很多资源详细描述了这一点。简而言之,重要的是衡量您所做的任何优化对性能的影响,并将其与代码可读性进行权衡。在这种情况下,我想您正在降低可读性,而对性能的影响可以忽略不计。

还值得注意的是,准确衡量性能本身就是一个完整的主题。如果差异很小,则很难获得有意义的结果,因为除了实际代码之外还有大约一百万个因素会影响性能——尤其是 Java,它的热点编译器。

没有看到代码,就很难了解您的确切应用程序。但是,您可以通过在 EnumSet 中使用枚举来提高性能而不会降低(或可能提高?)可读性。同样,如果提高性能是您的主要目标,那么衡量您的更改是否真正改善了任何事情非常重要。

您还可以使用 [List#contains](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/List.html#contains(java.lang.Object)

简化现有的 String#equals 代码

【讨论】:

    【解决方案2】:

    如果它们都是预先确定的,您可以只使用枚举吗?枚举基本上是一个带有一些额外辅助函数的命名数字列表。

    public enum myStrings
    {
        firstString,
        secondString,
        lastString
    }
    

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多