2012-01-07 70 views
5

tôi muốn xóa mọi phần tử cuối cùng của tập hợp này.cách xóa phần tử cuối cùng trong java.util.Set?

 Set<String> listOfSources = new TreeSet<String>(); 
     for(Route route:listOfRoutes){ 
      Set<Stop> stops = routeStopsService.getStops(route); 
      for(Stop stop:stops) 
       listOfSources.add(stop.getStopName()); 
     } 

tại đây tôi muốn xóa phần tử cuối cùng khỏi listOfSources.

+1

IMO mã của bạn dựa vào một ra lệnh thiết lập sau đó nó không thích hợp để khai báo các biến như một Set. Việc mã hóa thành một giao diện chỉ có ý nghĩa nếu việc triển khai không quan trọng - trong trường hợp này, và mã của bạn sẽ thất bại nếu bạn sử dụng câu trả lời được chấp nhận và bạn thay đổi cài đặt của bộ. –

Trả lời

13

Bạn sẽ cần phải quay lại TreeSet, vì Set không có bất kỳ thứ tự nào.

listOfSources.remove(((TreeSet) listOfSources).last()); 
+0

nhờ hoạt động của nó .. –

5

Là một thay thế bạn có thể đặt listOfSources như một SortedSet

SortedSet<String> listOfSources = new TreeSet<String>(); 

Sau đó, bạn có thể sử dụng last() phương pháp mà không cần đúc để TreeSet

listOfSources.remove(listOfSources.last()); 

Tôi nghĩ rằng đây là một cách tiếp cận ưa thích từ bạn cho rằng Set của bạn có một đơn đặt hàng.

1

Một khả năng khác là sử dụng lớp Stack. (Mặc dù ít hiệu quả hơn cho vấn đề được đề cập)

 Set<String> listOfSources = new TreeSet<String>(); 

    Stack<String> stack = new Stack<String>(); 
    stack.addAll(listOfSources); 
    ... 
    String lastElement = stack.pop(); 

Phương thức pop() sẽ lấy phần tử cuối cùng và xóa nó ra khỏi ngăn xếp.

+0

Điều này sẽ kém hiệu quả hơn (vì bạn đang tạo bản sao nông của bộ sưu tập và sau đó sắp xếp nó) và dự phòng - vì cấu trúc được sắp xếp đã sẵn sàng, chỉ cần truy cập đúng cách. –

+0

Nó chỉ là để tham khảo bởi những người dùng khác có vấn đề tương tự. Có lẽ Stack có thể là một lựa chọn trong các trường hợp khác. Trong điều này, điều này thực sự kém hiệu quả hơn. –

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