2013-08-21 27 views
13

Có cách nào khác thay thế cho Guava Tables có sử dụng nguyên thủy, thay vì các loại chung chung, làm khóa không?Thay thế nguyên thủy cho Bàn ổi

Tôi muốn sử dụng nguyên thủy để tránh tự động đấm bốc gây ra bằng cách sử dụng số Java và các mục nhập bổ sung được tạo bởi Java Maps.

Tôi đã cuộn LongLongObjectTable cơ bản của riêng mình bằng cách sử dụng Trove TLongObjectMap, nhưng muốn sử dụng thư viện chuẩn nếu có sẵn.

private static class LongLongObjectTable<T> { 
    private final TLongObjectMap<TLongObjectMap<T>> backingMap = new TLongObjectHashMap<>(); 

    T get(final long rowKey, final long columnKey) { 
     final TLongObjectMap<T> map = this.backingMap.get(rowKey); 
     if (map == null) { 
      return null; 
     } 
     return map.get(columnKey); 
    } 

    void put(final long rowKey, final long columnKey, final T value) { 
     TLongObjectMap<T> map = this.backingMap.get(rowKey); 
     if (map == null) { 
      map = new TLongObjectHashMap<>(); 
      this.backingMap.put(rowKey, map); 
     } 
     map.put(columnKey, value); 
    } 

    Collection<T> values() { 
     final List<T> values = new ArrayList<T>(); 
     for (final TLongObjectMap<T> map : this.backingMap.valueCollection()) { 
      values.addAll(map.valueCollection()); 
     } 
     return values; 
    } 
} 
+5

Bản đồ, Danh sách, Bộ trong Java hoạt động trên các đối tượng. Cuối cùng thì việc đấm bốc sẽ xảy ra dù bạn sử dụng chúng như thế nào. IMHO nó không có giá trị chiến đấu chống lại nó. Nếu bạn cần một giao diện đơn giản hơn, bạn luôn có thể triển khai giao diện đó bằng mẫu ủy quyền giống như những gì bạn đã dán. – allprog

+2

Bạn đã lược tả đơn đăng ký của mình chưa? Bạn có thể là tốt với Bàn của ổi mặc dù các đối tượng đấm bốc và nhập cảnh. –

+2

IMHO nghe có vẻ như tối ưu hóa sớm. Tôi hiểu rằng bạn muốn làm cho ứng dụng của mình chạy nhanh nhất có thể. Nhưng đối với autoboxing để bắt đầu là một cổ chai, bạn sẽ cần một tải của '> 10^n' hoạt động mỗi giây, với' n' tùy thuộc vào vấn đề cụ thể của bạn, mặc dù nói chung 'n> 3'. Bạn có chắc đây là trường hợp của bạn? –

Trả lời

2

Không thực sự. Vấn đề là việc triển khai như vậy sắp xảy ra không chung chung (theo định nghĩa) và sẽ cần được xác định từng cái một. Điều này có nghĩa là sự lặp lại đáng kể và có khả năng rất nhiều hoán vị thu thập có thể có.

Điều đó nói rằng, các ngôn ngữ khác cho phép điều này bằng cách làm cho trình biên dịch tạo mã cho các phiên bản của một bộ sưu tập có loại T thay vì sử dụng type erasure, nhưng đó không phải là hướng java đã đi.

Thực tế là bạn có thể sử dụng các biến thể được tự động đóng hộp như Dài hoặc Số nguyên trên bộ sưu tập hiện có đủ tốt cho phần lớn các trường hợp, vì chi phí trên tương đối thấp. Ngoài ra, các nhà thiết kế của thư viện chuẩn có thể thích giữ nó mỏng hơn là gây ô nhiễm nó với các biến thể tùy chỉnh bổ sung.

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