2010-08-01 70 views

Trả lời

15

Có một phương pháp contains cho các danh sách, vì vậy bạn sẽ có thể làm:

Arrays.asList(yourArray).contains(yourObject); 

Cảnh báo: điều này có thể không làm những gì bạn (hoặc I) mong đợi, xem bình luận của Tom dưới đây.

+2

Thats khá ngắn, nhưng trường hợp sử dụng này là đủ phổ biến mà họ thực sự cần phải thêm một hàm vào ngôn ngữ – Casebash

+2

Hãy cẩn thận không sử dụng với các mảng nguyên thủy. –

+0

@Tom: Tại sao không? Nó có hoạt động không? – Casebash

5

Sử dụng vòng lặp for. Không có gì được tích hợp vào mảng. Hoặc chuyển sang lớp sưu tập java.util.

7

Bạn có thể muốn xem xét sử dụng triển khai Collection thay vì một mảng phẳng.

Giao diện Collection xác định phương thức contains(Object o), trả về true/false.

ArrayList triển khai xác định indexOf(Object o), cung cấp chỉ mục, nhưng phương pháp đó không có trên tất cả các triển khai thu thập.

Cả hai phương pháp yêu cầu triển khai đúng đắn của phương pháp equals(), và có thể bạn muốn có một phương pháp thực hiện đúng hashCode() chỉ trong trường hợp bạn đang sử dụng một băm dựa Collection (ví dụ HashSet).

3

Bạn có thể sử dụng một trong nhiều phương thức Arrays.binarySearch(). Hãy nhớ rằng mảng phải được sắp xếp đầu tiên.

+1

Đó là một lựa chọn duy nhất là các phần tử của mảng có thể so sánh được. –

+2

Chúng tôi chỉ có thể giả định rằng đây là trường hợp, ví dụ: một mảng ints, Strings, v.v. Bạn luôn có thể cung cấp một ['Comparator'] tùy chỉnh (http://download.oracle.com/javase/6/docs/api/java/util/Comparator.html) để sắp xếp và tìm kiếm nếu cần. – krock

+0

khó tin rằng không có Arrays.search ... rogerdpack

7

Với Java 8, bạn có thể làm điều này:

int[] haystack = {1, 2, 3}; 
int needle = 3; 

boolean found = Arrays.stream(haystack).anyMatch(x -> x == needle); 

Bạn sẽ cần phải làm

boolean found = Arrays.stream(haystack).anyMatch(x -> needle.equals(x)); 

nếu bạn đang làm việc với các đối tượng.

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