Nếu bạn muốn nói "hiệu quả nhất" theo "tốt nhất", hãy đọc tiếp.
Tôi đề xuất sử dụng phương pháp sau nếu thực sự có rất nhiều.
Chuỗi trong Chuyển đổi thực sự là một cái gì đó sẽ có trong Java 7. (Là một phần của Project Coin)
Và đây là cách ngôn ngữ Java sẽ thực hiện nó.
Đầu tiên, giá trị băm của mỗi chuỗi được tính toán. Vấn đề này sau đó là một vấn đề "switch int", có sẵn trong hầu hết ngôn ngữ hiện tại, và hiệu quả. Trong mỗi câu lệnh case, bạn kiểm tra xem đây có thực sự là chuỗi không (trong trường hợp rất hiếm, các chuỗi khác nhau có thể băm vào cùng một int).
Cá nhân tôi không thực hiện bước cuối cùng trong thực tế vì nó cần thiết phụ thuộc vào tình huống mà bạn có chương trình cụ thể, tức là các chuỗi có thể nằm dưới sự kiểm soát của lập trình viên hay không và chương trình cần phải mạnh mẽ như thế nào.
Một giả mẫu tương ứng
String s = ...
switch(s) {
case "quux":
processQuux(s);
// fall-through
case "foo":
case "bar":
processFooOrBar(s);
break;
case "baz":
processBaz(s);
// fall-through
default:
processDefault(s);
break;
}
từ the fore-mentioned proposal để giúp bạn hiểu.
// Advanced example
{ // new scope for synthetic variables
boolean $take_default = false;
boolean $fallthrough = false;
$default_label: {
switch(s.hashCode()) { // cause NPE if s is null
case 3482567: // "quux".hashCode()
if (!s.equals("quux")) {
$take_default = true;
break $default_label;
}
processQuux(s);
$fallthrough = true;
case 101574: // "foo".hashCode()
if (!$fallthrough && !s.equals("foo")) {
$take_default = true;
break $default_label;
}
$fallthrough = true;
case 97299: // "bar".hashCode()
if (!$fallthrough && !s.equals("bar")) {
$take_default = true;
break $default_label;
}
processFooOrBar(s);
break;
case 97307: // "baz".hashCode()
if (!s.equals("baz")) {
$take_default = true;
break $default_label;
}
processBaz(s);
$fallthrough = true;
default:
$take_default = true;
break $default_label;
}
}
if($take_default)
processDefault(s);
}
Vâng, chỉ cần sử dụng bản đồ từ chuỗi này đến hàm khác. – Ben
@Ben bạn có thể đăng một ví dụ làm câu trả lời không? –