2012-03-18 2 views
5

Java Hashtable có một hàm tạo, trong đó bạn có thể chỉ định một loadFactor. Tuy nhiên, nếu initialCapacity (n) được biết, điểm xác định loadFactor là gì?Java HashTable LoadFactor

Giả sử rằng kích thước của mảng của xô (s) là hằng số, không các nhà xây dựng Hashtable(int initialCapacity, float loadFactor) chỉ cần tạo một bảng băm có công suất hơn initialCapacity để đảm bảo loadFactor có đúng không?

+1

Hệ số tải cho biết khi nào để thay đổi kích thước mảng. Một yếu tố tải cao hơn có nghĩa là thay đổi kích thước sau và nhiều va chạm hơn. –

+3

câu hỏi đặt ra là gì, tôi nghĩ (và tại sao tôi nghĩ đây là một câu hỏi thú vị) là: họ có thực sự chỉ sử dụng 'initialCapacity' để cho một kích thước ban đầu một cách mù quáng không? bởi vì, nếu có, chúng sẽ cần phải thay đổi kích thước khi các giá trị 'initialCapacity' được thêm vào (trừ khi loadFactor là 1). do đó, giả sử rằng 'initialCapacity' thường là một ước tính chính xác về số lượng giá trị sẽ được thêm vào, sẽ không có ý nghĩa hơn để tính toán kích thước ban đầu sao cho các điểm' initialCapacity' có thể được thêm mà không thay đổi kích thước? nói cách khác: công suất ban đầu có nghĩa là ban đầu * kích thước bảng * hoặc công suất * ban đầu *? –

+1

@andrewcooke: Tôi hiểu ý của bạn, nhưng theo [Javadoc] (http://docs.oracle.com/javase/6/docs/api/java/util/Hashtable.html), "The * capacity * là số lượng * nhóm * trong bảng băm "(in nghiêng trong bản gốc), vì vậy không có mâu thuẫn ở đây - chỉ, có lẽ, một sự lựa chọn nghèo nàn của từ. – ruakh

Trả lời

6

Giả sử rằng kích thước của mảng của xô (s) là hằng số, [& hellip;]

Giả định này là không đúng. Mảng các nhóm được thay đổi kích thước khi cần thiết để đảm bảo rằng tỷ lệ các nhóm không trống là tối đa là loadFactor.

(Lưu ý: the Javadoc nói rằng "Các tham số yếu tố tải trọng và công suất ban đầu chỉ là gợi ý cho việc triển khai. Chi tiết chính xác về thời gian và liệu phương pháp rehash được gọi là phụ thuộc thực hiện" hay không được thực hiện như một đảm bảo nghiêm ngặt. Tuy nhiên, đó là hành vi chung.)

2

Vì chỉ có dung lượng ban đầu. HashMap là cấu trúc động; bạn có thể vượt quá dung lượng ban đầu là những gì loadfactor được sử dụng cho - để biết khi mở rộng.

(Và cấu trúc dữ liệu không có cách nào để chia sẻ ý định của bạn nếu bạn muốn nói bạn biết rằng bạn sẽ không bao giờ vượt quá dung lượng ban đầu; đó là cấu trúc dữ liệu chứ không phải AI thông minh)).

-1

Nếu bạn biết chính xác kích thước của bảng, sau đó thực hiện loadfactor 1. Lớp này được viết cho mọi người - bao gồm trường hợp có khả năng mọi người sẽ muốn để tăng kích thước của mảng.