将所有 .equals(string) 替换为 == (int)
Replacing all .equals(string) with == (int)
我的 java 项目使用具有 ArrayList
个字符串的对象。然而,这些字符串是预先确定的。只有 47 种左右可能的字符串。现在我想检查 ArrayList
是否包含某个 String
.
我目前通过 .equals()
执行此操作,但我认为这很慢,所以我想切换到 ==
(int)。然而,手动将所有 .equals()
转换为 ==
(int) 非常烦人。尤其是当事情又要改变的时候。
那么有没有一种工具可以将一组字符串的所有这些 .equals()
转换为 ==
(int)?
谨防过早优化(这是万恶之源)。有很多资源对此进行了详细描述。简而言之,衡量您所做的任何优化的性能影响并将其与代码可读性进行权衡非常重要。在这种情况下,我认为您正在降低可读性,因为对性能的影响可以忽略不计。
还值得注意的是,准确测量性能本身就是一个完整的主题。如果差异很小,则很难获得有意义的结果,因为除了实际代码之外,还有大约一百万个因素会影响性能 - 特别是 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 代码
如果它们都是预先确定的,你可以只使用枚举吗?枚举基本上是带有一些额外辅助函数的命名数字列表。
public enum myStrings
{
firstString,
secondString,
lastString
}
我的 java 项目使用具有 ArrayList
个字符串的对象。然而,这些字符串是预先确定的。只有 47 种左右可能的字符串。现在我想检查 ArrayList
是否包含某个 String
.
我目前通过 .equals()
执行此操作,但我认为这很慢,所以我想切换到 ==
(int)。然而,手动将所有 .equals()
转换为 ==
(int) 非常烦人。尤其是当事情又要改变的时候。
那么有没有一种工具可以将一组字符串的所有这些 .equals()
转换为 ==
(int)?
谨防过早优化(这是万恶之源)。有很多资源对此进行了详细描述。简而言之,衡量您所做的任何优化的性能影响并将其与代码可读性进行权衡非常重要。在这种情况下,我认为您正在降低可读性,因为对性能的影响可以忽略不计。
还值得注意的是,准确测量性能本身就是一个完整的主题。如果差异很小,则很难获得有意义的结果,因为除了实际代码之外,还有大约一百万个因素会影响性能 - 特别是 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 代码如果它们都是预先确定的,你可以只使用枚举吗?枚举基本上是带有一些额外辅助函数的命名数字列表。
public enum myStrings
{
firstString,
secondString,
lastString
}