2012-04-02 17 views
24

Tôi đã tạo một danh sách số nguyên và đang cố trả về chỉ mục của một giá trị cụ thể. Mảng là 3,8,2,5,1,4,7,6 và tôi muốn trả lại chỉ mụcOf (3), phải là 0.Tại sao indexOf không tìm thấy đối tượng?

Tôi đã thử những điều sau đây trong sổ ghi chép Java Eclipse sau khi nhập java.util *:.

int[] A = {3,8,2,5,1,4,7,9}; 
Arrays.asList(A).indexOf(3) 

tôi cũng đã cố gắng:

int[] A = {3,8,2,5,1,4,7,6}; 
ArrayList<Integer> l = new ArrayList(Arrays.asList(A)); 
l.indexOf(3) 

Cả hai đều trở về -1. Tại sao? Làm thế nào để có được điều này để làm việc như mong đợi?

+0

Cảm ơn bạn đã trả lời tất cả mọi người. Với thay đổi đó mặc dù tôi sẽ phải thay đổi cấu trúc dữ liệu của mình, vì vậy thay vào đó tôi sẽ sử dụng phương thức binarySearch vì nó sẽ làm việc trên các mảng int []. – rishimaharaj

+2

Chỉ cần được cảnh báo rằng điều đó sẽ chỉ hoạt động trên các mảng _sorted_ 'int []', mà các ví dụ bạn mô tả là không. –

+0

@LouisWasserman Tôi không nhận được bình luận của bạn và upvotes nó nhận được. 'indexOf'" Trả về chỉ mục của lần xuất hiện đầu tiên của phần tử được chỉ định trong danh sách này, hoặc -1 nếu danh sách này không chứa phần tử. " - vậy tại sao nó không hoạt động cho các mảng tùy ý? – arekolek

Trả lời

20

Nó phải là số nguyên [] không int [] để làm cho nó hoạt động.

Integer[] A = {3,8,2,5,1,4,7,9}; 
final int i = Arrays.asList(A).indexOf(3); 
System.out.println("i = " + i); // prints '0' 
30

Arrays.asList(A) trả về một List<int[]>. Điều này là bởi vì nó mong đợi một mảng các đối tượng, không phải các kiểu nguyên thủy. lựa chọn của bạn bao gồm:

  • sử dụng Integer[] thay vì int[]
  • inline mảng, và để cho autoboxing nâng niu mang của nó; Arrays.asList(3,8,2,5,1,4,7,9) sẽ hoạt động tốt
  • sử dụng phương thức Guava'sInts.asList(int...) để xem mảng nguyên thủy là List<Integer>. (Tiết lộ: Tôi đóng góp cho ổi.)
  • sử dụng số Ints.indexOf(int[], int) của ổi, hoạt động trực tiếp trên các mảng nguyên thủy.
1

Hãy làm theo cách này

Integer[] array = {3,8,2,5,1,4,7,9}; 
List<Integer> list = Arrays.asList(array); 

System.out.println(list.indexOf(8)); 

asList trả static <T> List<T> đâu T không thể nguyên thủy (int []).