2012-01-25 28 views

Trả lời

12

Điều này có thể được thực hiện với một tiêu chuẩn SortedMap:

Map<String,V> tailMap = myMap.tailMap(prefix); 
boolean result = (!tailMap.isEmpty() && tailMap.firstKey().startsWith(prefix)); 

bản đồ Unsorted (ví dụ HashMap) không thực sự hỗ trợ tra cứu tiền tố, vì vậy đối với những người bạn sẽ phải lặp qua tất cả các khóa.

+1

Vì tôi đang sử dụng một bản đồ băm tôi thu thập được, tôi có thể tạo một bản đồ cây bằng cách sau: 'TreeMap treeMap = new TreeMap(); treeMap.putAll (hashMap); ' – Edd

+3

@Edd: Hoặc, thậm chí đơn giản hơn,' TreeMap treeMap = new TreeMap (hashMap); ' – NPE

2

Từ bản đồ, bạn có thể nhận được một chùm chìa khóa, và trong trường hợp họ là string, bạn có thể lặp trên các yếu tố của Set và kiểm tra startsWith("abc")

+0

cảm ơn, tôi có thể thấy điều này sẽ làm việc mặc dù tôi đã hy vọng tôi sẽ không phải lặp qua bộ khóa – Edd

+0

@Edd Tại sao không? Nó được tối ưu hóa bởi java guys được sử dụng theo cách này;) –

+0

nó kết quả trong phức tạp cyclomatic cao hơn trừ khi bạn kéo nó vào một phương pháp riêng biệt và tôi không có lớp học rõ ràng để đưa một phương pháp như vậy tôi đã hy vọng tôi sẽ không cần phải tạo ra một lớp tiện ích mới cho bản đồ với một phương pháp duy nhất trong ... nghe như tôi đang lười biếng khi tôi nói vậy nhưng nó sẽ giúp nếu có xảy ra là một phương pháp tiện ích sẵn sàng cho điều này ... mơ tưởng;) – Edd

0

Để xây dựng trên Adel Boutros trả lời/nhận xét về hiệu quả của các khóa lặp lại, bạn có thể đóng gói lặp lại khóa trong lớp con hoặc trang trí con Map.

Mở rộng HashMap sẽ cung cấp cho bạn một lớp để đặt phương pháp và giữ mã cụ thể theo bản đồ của bạn, do đó làm giảm độ phức tạp và làm cho mã tự nhiên hơn để đọc.

+0

Điều này có nghĩa là HashMap của tôi sẽ cần phải là một thể hiện của HashMap mở rộng và tôi sẽ phải thực hiện một dàn diễn viên từ Bản đồ (nếu bản đồ được khai báo là Bản đồ) để sử dụng phương pháp. Nó đặt mã ở một nơi gọn gàng nhưng có lẽ không phải là có thể sử dụng được – Edd

+0

Có. Hoặc bạn có thể làm 'MyMapExtension m = new MyMapExtension (myMap); ' Hoặc bạn có thể đi với một giải pháp trang trí để bọc bản đồ. Cả hai sẽ đọc tương tự như ý tưởng ban đầu của bạn. –

+0

Tôi hiểu ... Tôi cho rằng tùy chọn trang trí sẽ ngăn chặn một bản sao mới của bản đồ được tạo nên hiệu quả hơn – Edd

Các vấn đề liên quan