2011-03-26 18 views

Trả lời

38

[] là một toán tử và java không hỗ trợ quá tải toán tử, bạn không thể sử dụng nó với Danh sách. Thay vào đó, bạn phải sử dụng các phương thức set(int index, T value)get(int index), có thể dài dòng nhưng cung cấp chính xác chức năng tương tự.

18

List.get(int) cho phép bạn truy cập vào các yếu tố bằng cách sử dụng chỉ mục.

+0

Người đàn ông, tôi yêu bạn <3. – Kadaj

2

Không, bạn không thể làm điều này trong Java.

+0

@Downvoter Patrick đã đúng khi nói rằng 'danh sách [5]' là không thể trong Java, mặc dù ông đã không đề cập đến bất kỳ lựa chọn thay thế. – asgs

+2

@asgs - Tôi không phải là "Downvoter", nhưng câu trả lời là không hữu ích, nó thực sự sai. Có, "chúng tôi có thể sử dụng chỉ mục để truy cập Danh sách" bằng cách sử dụng 'list.get (int)' hoặc, nếu thực sự * cần thiết *, 'list.toArray() [5]' [:-) –

+0

@Carlos không biết về 'toArray()'. Cảm ơn. – asgs

6

Bạn có thể truy cập vào các yếu tố Danh sách sử dụng chỉ mục của họ thông qua việc sử dụng các get phương pháp:

được

Object nào get (int index)

Returns các phần tử ở vị trí quy định trong danh sách này.

Tham số: chỉ mục - chỉ mục của phần tử cần trả lại.

Trả về: phần tử ở vị trí được chỉ định trong danh sách này.

Ném: IndexOutOfBoundsException - nếu chỉ số là ra khỏi phạm vi (index < 0 || index> = size()).

Hãy nhớ rằng chỉ mục trong Danh sách là 0 dựa.

2

Không, bạn bị giới hạn ở List.get (i).

Các ngoặc vuông [] được xác định ở cấp độ cú pháp, không phải là tên phương thức, do đó bạn không thể ghi đè chúng. Chúng được sử dụng chỉ dành riêng cho mảng.

Nếu bạn muốn di chuyển sang Scala, một ngôn ngữ hiện đại hơn cho JVM, bạn sẽ tìm thấy quyền truy cập thống nhất vào mảng và danh sách, nhưng cả hai đều có dấu ngoặc đơn là ().

5

Có rất nhiều câu trả lời hay ở đây, nhưng tôi chỉ muốn chỉ ra rằng list.get(i) chỉ giống như list[i] chỉ khi danh sách được triển khai với một mảng (ví dụ ArrayList). Nếu nó là một LinkedList bạn không thực sự lập chỉ mục với get, mà là lặp lại.

Vì vậy, nếu bạn sử dụng get() với Danh mục loại giao diện, đặc biệt là trong một vòng lặp, bạn nên kiểm tra cách thực hiện, như get() với ArrayList là O (1) trong khi get() với LinkedList là O (n) (chậm hơn nhiều).

3

một thay thế cho sử dụng get(int) là tạo ra một mảng sử dụng toArray()

List<T> list = ... 

Object[] array = list.toArray(); 

nếu T là biết, toArray(T[]) có thể được sử dụng để trả T[] thay vì Object[].
Việc sử dụng toArray chỉ có ý nghĩa, thay vì get, nếu một mảng thực sự là cần thiết (nhiều truy cập).

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