2010-09-16 46 views
25

Điều gì sẽ là điều gần nhất với std :: vector trong Java? Điều này có nghĩa là, một lớp có thể đưa T vào trong hàm khởi tạo của nó và sau đó pushBack, popBack() và được lưu trữ trong bộ nhớ liên tục (không phải danh sách liên kết).Tương đương với std :: vector trong Java?

Cảm ơn

+0

Ra khỏi tò mò, tại sao bạn cần một cái gì đó mà được lưu trữ trong bộ nhớ liên tục chưa có Push và hoạt động Pop giống như một chồng? –

+1

@ferrari fan: Tôi đoán anh ấy chỉ đề cập đến những người kể từ khi lớp vector của C++ có phương pháp tương tự. – casablanca

+1

Bộ nhớ liên tục là gì? – fastcodejava

Trả lời

31

ArrayList
lưu trữ trong mảng ("bộ nhớ liên tục") Tất cả những gì của nội bộ, mặc dù tên hoạt động là một chút khác nhau.

A bit more about list implementations in Java
And about generics

chỉnh sửa
Helper Method cũng đề cập đến lớp hữu ích trong câu trả lời của mình (mặc dù không chính xác tương đương với C++ Vector).

+1

Không thể sử dụng Java Vector thay vì ArrayList? –

2

ArrayList là những gì bạn đang tìm kiếm?
ArrayList l = new ArrayList<String>();
Vì vậy, bạn có thể có danh sách mọi thứ (được xác định giữa <>).

7

Điều đó có thể là ArrayDeque, nếu bạn cần chức năng Stack.

Không sử dụng lớp Stack như ở đây.

+2

Cuộc gọi tốt, mặc dù 'ArrayList' vẫn sẽ là một kết hợp gần hơn vì nó hỗ trợ truy cập phần tử được lập chỉ mục như C++' vector'. – casablanca

1

Bạn có thể sử dụng một ArrayDeque, nó không hỗ trợ truy cập ngẫu nhiên nhưng hỗ trợ Deque (đôi đã kết thúc hàng đợi) phương pháp

0

Làm thế nào về chỉ đơn giản là lớp Vector?

http://download-llnw.oracle.com/javase/6/docs/api/java/util/Vector.html

+2

'Vector' bị phản đối khá nhiều, thay vào đó hãy sử dụng' ArrayList'. –

+0

Tôi đã sửa. Có vẻ như điểm này đã được thảo luận ở đây cũng như http://stackoverflow.com/questions/1386275/why-java-vector-class-is-considered-obsolete-or-deprecated –

2

Bạn đang có lẽ tìm kiếm các ArrayDeque mà hỗ trợ push/pop truy cập phong cách từ cả hai đầu của danh sách một cách hiệu quả.

TránhStackVector - đây được đồng bộ hóa, trong đó hàm ý overhead thường vô nghĩa.

ArrayList cũng tốt; tuy nhiên, bạn cần phải triển khai phương thức pop (tầm thường) của riêng mình vì nó không được cung cấp bởi chính lớp đó. ArrayList không cho phép truy cập được lập chỉ mục, thiếu ArrayDeque.

0

gì bạn cần là chính xác một java.util.ArrayList<T> Bạn có thể kiểm tra tài liệu trong http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

Về cơ bản là một danh sách thực hiện với một mảng nơi tham khảo sống trong một đoạn liên tục của bộ nhớ.

Tôi khuyên bạn nên sử dụng kết hợp với biến giao diện như sau: List<String> stringList = new ArrayList<String>(); vì vậy nếu bạn quyết định, bạn có thể thay đổi triển khai thành java.util.LinkedList<T> hoặc một số khác.

1

tôi nghĩ rằng nó là LinkedList

vector (c++) <===========> linkedlist(java) 
v.front()  <===========> l.peekFirst() 
v.back()  <===========> l.peekLast() 
v.push_back(x) <===========> l.add(x) 
v.pop_back() <===========> l.pollLast() 
Các vấn đề liên quan