2010-09-09 4 views
9

Tôi đang cố gắng để tạo ra một Hashtable như trong những điều sau đây:Hashtable với phím số nguyên trong Java

Hashtable<int, ArrayList<byte>> block = new Hashtable<int, ArrayList<byte>>(); 

nhưng tôi nhận được một lỗi trên cả int và byte câu nói "Kích thước mong đợi sau khi dấu hiệu này".

Nếu tôi sử dụng một cái gì đó như:

Hashtable<String, byte[]> - tất cả đều tốt. Ai đó có thể giải thích lý do tại sao?

Cảm ơn.

Trả lời

23

Trong các lớp thu thập cốt lõi của Java, bạn chỉ có thể lưu trữ các loại tham chiếu (một thứ mở rộng một java.lang.Object). Bạn không thể nguyên thủy cửa hàng như intbyte. Lưu ý rằng một mảng như byte[] không phải là nguyên thủy mà còn là một kiểu tham chiếu.

Như @Giuseppe đề cập, bạn có thể định nghĩa nó như thế này:

Hashtable<Integer, ArrayList<Byte>> table = new Hashtable<Integer, ArrayList<Byte>>(); 

và sau đó đặt nguyên thủy int 's trong nó như là phím:

table.put(4, ...); 

vì kể từ Java 1.5, autoboxing sẽ tự động thay đổi nguyên thủy int thành một Integer (một wrapper) đằng sau hậu trường.

Nếu bạn cần thêm tốc độ (và đo các lớp thu gom bao bọc là vấn đề!), Bạn có thể sử dụng thư viện của bên thứ ba có thể lưu trữ nguyên thủy trong bộ sưu tập của họ. Ví dụ về các thư viện đó là TroveColt.

0

Không thể khởi tạo các Generics Java với các kiểu nguyên thủy. Hãy thử sử dụng các lớp bao bọc thay thế:

Hashtable<Integer, ArrayList<Byte>> block = new Hashtable<Integer, ArrayList<Byte>>(); 
0

Bạn có thể sử dụng Integer thay vì int và nếu bạn đang sử dụng java 1.5+ tính năng boxing/unboxing sẽ làm cho cuộc sống của bạn trở nên dễ dàng khi làm việc với nó.

Hashtable<Integer,byte[]> block = new Hashtable<Integer,byte[]>();