Trong một ứng dụng java, giả sử tôi có tùy chọn của việc lựa chọn phương pháp so sánh sau đâyĐó là nhanh hơn, equalsIgnoreCase hoặc compareToIgnoreCase
equalsIgnoreCase (String anotherString)
compareToIgnoreCase (String str)
Cái nào nhanh hơn?
Trong một ứng dụng java, giả sử tôi có tùy chọn của việc lựa chọn phương pháp so sánh sau đâyĐó là nhanh hơn, equalsIgnoreCase hoặc compareToIgnoreCase
equalsIgnoreCase (String anotherString)
compareToIgnoreCase (String str)
Cái nào nhanh hơn?
equalsIgnoreCase
thể thể nhanh hơn rất nhiều. Ví dụ, hãy xem xét hai chuỗi bắt đầu với cùng một 10.000 ký tự - nhưng một trong số chúng có ký tự thừa ở cuối. equalsIgnoreCase
có thể trở lại ngay lập tức; compareToIgnoreCase
phải lặp lại đến cuối chuỗi để thấy sự khác biệt.
Nhưng nói chung tôi sẽ đi với bất kỳ điều gì thể hiện ý định của bạn tốt hơn. Điều này cũng phù hợp với hiệu suất: giả sử tôi đúng khi nói rằng equalsIgnoreCase
ít nhất là nhanh như compareToIgnoreCase
, có nghĩa là bạn nên sử dụng nơi bạn có thể - nếu bạn cần đặt hàng thực tế, bạn vẫn phải sử dụng compareToIgnoreCase
.
nếu bạn lo lắng về màn trình diễn ... đo lường nó
Quá dễ dàng! Phải có cách để lãng phí thời gian của nhiều người hơn! – Bombe
thực sự, câu trả lời rất hay phải không? – dfa
Nó thực sự rất dễ dàng để đi đến kết luận sai bằng cách sử dụng đo trong trường hợp này, vì kết quả rất nhiều phụ thuộc vào chính xác những gì bạn đo. Thật tốt khi thu được một số hiểu biết đầu tiên - xem câu trả lời của Jon Skeet cho một ví dụ điển hình. –
Nhìn vào nguồn cho java.lang.String
public boolean equalsIgnoreCase(String anotherString) {
return (this == anotherString) ? true :
(anotherString != null) && (anotherString.count == count) &&
regionMatches(true, 0, anotherString, 0, count);
}
Vì vậy, trước khi nó nhìn vào chuỗi ký tự thực tế của nhân vật (mà cũng xảy ra trong một thời trang tương tự cho compareToIgnoreCase
), equalsIgnoreCase
cũng kiểm tra để tham khảo bản sắc và độ dài ký tự, có thể nhanh hơn rất nhiều.
Hoặc nó có thể là một sự lãng phí thời gian khi hầu hết các chuỗi là khác nhau :) –
chắc chắn, đó là một sự cân bằng. Nhưng hai so sánh này rất nhanh, vì vậy bạn sẽ không mất nhiều. Và so sánh chiều dài nên khá hiệu quả (phát hiện rất nhiều chuỗi khác nhau rất nhanh). – Thilo
@Downvoter: Chăm sóc để đưa ra lý do? –
equalsIgnoreCase() có một số khác biệt quan trọng đối với compareToIgnoreCase(). Đối với 1, nó kiểm tra cho == bình đẳng đầu tiên trước khi thực sự nhìn thấy nếu tất cả các ký tự đều giống nhau. CompareTo sẽ luôn thực hiện so sánh đầy đủ các ký tự, nhưng nó sẽ không xem xét địa phương. Vì vậy, bạn thực sự cần phải biết so sánh để sử dụng và sau đó điểm chuẩn nó. –