2011-08-16 32 views
45

Tôi có một câu hỏi về bộ sưu tập đơn giản. Tôi có một đối tượng Set<String>. Tôi muốn đếm các chuỗi trong tập hợp đó. Cách sạch nhất/tốt nhất để đi về nó là gì?Java: Enumeration từ Set <String>

+1

Đếm như trong java.util.Enumeration? Bất kỳ lý do nào không sử dụng java.util.Iterable thay thế? –

+2

yes..bởi vì tôi đang ghi đè phương thức trả lại cụ thể một Số đếm . – Charlotte

+1

Tôi nghĩ bạn nên chấp nhận câu trả lời bình chọn nhiều nhất. –

Trả lời

26

EDIT: Không cần phải viết của riêng bạn (mặc dù tôi sẽ để triển khai bên dưới cho hậu thế) - xem câu trả lời của Kevin Bourrillion cho câu trả lời trong JDK.


Nếu bạn thực sự cần một điều tra, có thể có thể sử dụng:

Enumeration<String> x = new Vector(set).elements(); 

Nó sẽ là tốt hơn để sử dụng Iterable<E> nếu có thể dù ...

Một lựa chọn tốt hơn là để viết một lớp bao bọc nhỏ xung quanh Iterator<E>. Bằng cách đó bạn không cần phải có một bản sao chỉ để tìm một imlementation của Enumeration<E>:

import java.util.*; 

class IteratorEnumeration<E> implements Enumeration<E> 
{ 
    private final Iterator<E> iterator; 

    public IteratorEnumeration(Iterator<E> iterator) 
    { 
     this.iterator = iterator; 
    } 

    public E nextElement() { 
     return iterator.next(); 
    } 

    public boolean hasMoreElements() { 
     return iterator.hasNext(); 
    } 

} 


public class Test { 
    public static void main(String[] args) { 
     Set<String> set = new HashSet<String>(); 
     Enumeration<String> x = new IteratorEnumeration<String>(set.iterator()); 
    } 
} 
+0

@Downvoter: Chăm sóc bình luận? –

+0

Tôi cũng đã bỏ phiếu. Không cần phải viết thực hiện của riêng bạn khi JDK có một phương pháp util tĩnh mà nó cho bạn như được chỉ ra bởi Kevin Bourrillion. – Snekse

+1

@Snekse: Nếu người đánh giá trước đó đã nói nhiều, điều đó sẽ hữu ích. Tôi không thể xóa câu trả lời của tôi ngay bây giờ vì nó là một trong những chấp nhận, nhưng tôi có thể chỉ ra của Kevin ... –

5

Giả sử bạn có nghĩa là liệt kê theo nghĩa toán học một cách sạch nhất để làm điều này là thông qua một cho vòng lặp, áp dụng đối với bất kỳ lớp mà thực hiện Iterable:

Set<String> strs = ... 

for (String s : strs) { 
... 
} 

Nếu bạn thực sự đòi hỏi một Enumeration bạn có thể thực hiện một lớp adapter để quấn Iterator trở bằng cách gọi iterator(). Có một lớp bộ điều hợp trong thư viện Bộ sưu tập Apache: IteratorEnumeration.

Hoặc bạn có thể sử dụng thư viện ổi của Google:

Set<String> mySet = ... 
Enumeration<String> = Iterators.asEnumeration(mySet.iterator()); 
+1

Downvoter ...quan tâm để bình luận? – Adamski

170

java.util.Collections.enumeration(set)

Javadoc

Trả về một liệt kê trong bộ sưu tập xác định. Điều này cung cấp khả năng tương tác với các API cũ yêu cầu điều tra là đầu vào .

+8

Ok, tôi nhận ra câu trả lời của tôi là ngắn gọn, nhưng đó là bởi vì đó là tất cả những gì thực sự cần phải nói. :) Phương thức này nằm trong JDK và * chính xác * những gì mà người đăng yêu cầu. Thật kỳ lạ với tôi rằng nó sẽ được xếp hạng cuối cùng. –

+1

Mục Java hiệu quả 47: Biết và sử dụng các thư viện – Ray

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