我已经看过如何为字符串创建哈希的示例。这是Java中的一个例子:
private int getHashCode(String text) {
int hash = 7;
for (int i = 0; i < text.length(); i++) {
hash = hash * 31 + text.charAt(i);
}
return hash;
}
这当然可以产生大量数字。如果我将我的字符串存储在一个数组中,并且我只说了10个数组项,那么如何从哈希码中计算数组索引?我当然可以使用HashMap来做这件事,但我想这样做是为了学习如何从哈希码创建索引。
答案 0 :(得分:4)
您可以使用余数运算符(int index = obj.getHashCode ("SomeString") % yourArray.length;
)将哈希代码映射到数组的索引:
HashMap
当然,您应该能够处理冲突(即两个或多个Strings映射到同一个数组索引的情况)。
%
通过在数组的每个索引中存储一个条目实例来处理这种潜在的冲突,该条目实例可以指向映射到同一索引的下一个条目(从而形成一个链表)。
编辑:
正如下面正确评论的那样,int index = Math.floorMod (obj.getHashCode ("SomeString"), yourArray.length);
运算符不适用于负哈希码。作为替代方案,您可以使用Math.floorMod(在Java 8中引入):
HashMap
无论哈希码的符号如何,都可以保证返回非负索引。
或者您可以采用obj.getHashCode ("SomeString") & (yourArray.length - 1)
实施中使用的替代方案。如果数组的长度始终为2的幂,则可以使用 function cover_upload($afbeelding) {
// path where the picture needs to be uploaded
echo $album_path = APPPATH . 'images/covers';
// configuration for the upload
$ext = end(explode(".", $_FILES['userfile']['name']));
$config = array(
'file_name' => $afbeelding . '.' . $ext,
'upload_path' => $album_path,
'allowed_types' => 'gif|jpg|jpeg|png',
'max_size' => '5120'
);
// load upload library with the configuration
$this->load->library('upload', $config);
// upload picture with the upload library
if (!$this->upload->do_upload()) {
echo $this->upload->display_errors();
die();
}
// get data array of the uploaded picture
$image_data = $this->upload->data();
// configuration for the picture thumbnail resize
echo $image_data['full_path'];
$config = array(
'source_image' => $image_data['full_path'],
'new_image' => realpath($album_path . '/thumb'),
'maintain_ration' => TRUE,
'width' => 300,
'height' => 300
);
// load image manupulation library with the configuration
$this->load->library('image_lib', $config);
// resize picture
$this->image_lib->resize();
$this->image_lib->clear();
// submit file name of the uploaded picture to save it in the database
$bestandsnaam = $image_data['file_name'];
return $bestandsnaam;
}
。
答案 1 :(得分:1)
来自Java hashmap实现
n->数组大小
index = hashCode(key) & (n-1).