SlideShare a Scribd company logo
HashMapとは?
2017/2/24 勉強会
トラッシュブリーフィング合同会社
⿊岩 卓誠
1
1 Mapとは<イントロダクション>
2 配列・リストを使うと…?
3 HashMapとは?
4 HashMapの仕組み(ハッシュテーブル)
5 HashMapの特徴
6 まとめ
2
目次
・Map = KeyとValueを紐づけてデータを格納するデータ構造のこと
- Keyの重複は許されない。(同じキーをput/格納すると、値は上書きされる)
- キーから値を参照するデータ構造を持ったデータの利⽤に役⽴つ(電話帳・辞書 etc)
3
1. Mapとは(イントロダクション)
配列やArrayListでは、インデックス(数値)で要素を特定するが、
HashMap(Map)ではオブジェクト(キー)を使って要素を特定する。
【問題:要素が5つ(2,3,6,9,15)格納されている配列から、要素が9の数字を⾒つける】
int[ ] data={2,3,6,9,15}; //先頭から順に調べるアルゴリズム(線形探索)を組んだ場合
// 格納されている要素を先頭から順に調べる
for(int i=0; i < data.length; i++) {
if(data[i] == 9) {
System.out.println(“要素の” + i +”番⽬が9です”);
}
}
・配列やリストの場合、要素を特定する際に【1つづつ全要素探索する(線形探索)】のアルゴ
リズムを使う場合が多いと思います。1個ずつ調べるとなると、実⾏に時間がかかる…
→ もっと⾼速に!要素を特定する為の⼿段として「HashMap」という実装⼿段がある!
4
2. 配列・リストを使うと…?
【実行結果】
2 3 6 9
1
5
5
【補⾜】プログラムと「計算量」
【実行結果】
「計算量」<O記法(オーダー記法)>とは
「⼊⼒サイズの増加に対して、実⾏時間がど
れくらいの割合で増加するかを表す指標」
O(1) :各要素へのアクセス
int[ ] data={2,3,6,9,15}; → data[2] // 3
O(n) :要素を先頭から順に調べる
データが増えれば増えるほど計算量が増える
・Map(2つの情報をキー<Key>と値<Value>のペアとして格納するデータ構造)の
実装クラスの中でもよく使われるJavaクラス。
- Javaでは、java.util.Mapインターフェイス及び、java.util.HashMapクラスに代表す
る各種実装クラスを⽤いることで、⼿軽にMapを活⽤できる。【スッキリわかるJava⼊⾨実践編 第2版】
6
3. HashMapとは?
【実行結果】
put(K key, V value):追加 / get(Object key):値の取得 /remove:削除
「ハッシュ関数」を使って、[Key]と[Value]をペアで格納する。
7
1
4. HashMapの仕組み(ハッシュテーブル)
① 引数を1つ与えると、数値の戻り値を1つ返す。/ ②同じ引数を与えた場合は必ず同じ値を返す。
③ 別の引数を与えた場合は、なるべく違う値を返す。(ハッシュ関数の特性)
ハッシュテーブルでは、ハッシュ関数で得られたハッシュ値を元に、「どこにデータを格納するか」
「どこからデータを⾒つけるか」を決めている。
8
4. HashMapの仕組み(ハッシュテーブル)
【Key:”ネコ”を探索する】
①キー"ネコ"からハッシュ値:2
を取得
②ハッシュ値:2とbin配列
(0~5)の要素数で剰余を取る
→ 2/6 = 0…2
※ bin配列の3つ⽬の連結リスト
の中に[キー:”ネコ"]の値がある
ので、その値を取得する。
(キー:"ネコ" 、値:”CAT")
ハッシュテーブルでは、ハッシュ関数で得られたハッシュ値を元に、「どこにデータを
格納するか」「どこからデータを⾒つけるか」を決めている。
ハッシュテーブルでは多くの場合、要素数がbin配列の数を⼤きく上回り始め
ると、"rehash"と呼ばれる操作を⾏う。
9
2
4. HashMapの仕組み(ハッシュテーブル)
256 256 256 256
それぞれの連結リストに要素が256個ずつ入っているとしたら
そこで"rehash"
1)新しくより多くの数のbinを⽤意
2)古いbinに⼊っている要素それぞれに
対して、新しいbinのどれに⼊るかを
計算し直す
3)各要素を新しいbinに⼊れ直す
4)全ての要素が新しいbinに⼊ったら
古いbinを捨てる
rehashをすることで、1つのbinに⼤量の要素が⼊
っていて⼤きな連結リストを辿るといった状況回避
10
5. HashMap(ハッシュテーブル)の特徴
【特徴その①】各要素へのアクセスがO(1)とみなせる。
・ハッシュテーブルでは、ハッシュ値から「どのbinに値が格納されているか」を
計算で⼀発で出すことができるので、各要素のアクセスはO(1)
0
1
2
3
{"key":value} / {"key1":value} /
{"key2":value} / {"key3":value}
{"key":value} / {"key1":value} /
{"key2":value} / {"key3":value}
{"key":value} / {"key1":value} /
{"key2":value} / {"key3":value}
{"key":value} / {"key1":value} /
{"key2":value} / {"key3":value}
Bucket(バケット)
Binはすぐ求められるけど、その後の連結リストを探し
に⾏くと…O(n)になるんじゃないの?
ここで役に⽴つ"rehash"
このハッシュテーブルでは、要素数がbinの4倍の数を
上回ったらrehashする
→ どんなに多くても全要素数がbinの4倍。期待値とし
て連結リストのサイズは4までに収まる
→ 計算量が⼀定、であると⾔える。[常に定数4で計算
する] ハッシュテーブルにおける各要素へのアクセス
がO(1)とみなす事が出来る。
11
5. HashMap(ハッシュテーブル)の特徴
【特徴その②】各要素への追加がO(1)のコストで出来るといえる。
・ハッシュ値から値が格納されているbinまではO(1)でアクセスできる。かつ、
連結リストの先頭に値を追加するときはO(1)なので、ハッシュテーブルへの挿⼊
はO(1)ですることが出来る。
12
6. まとめ
1
2
3
HashMap = ハッシュ法(アルゴリズム)に基づいて実装されている。
※アルゴリズムにおける「ハッシュ探索」という考え⽅を元にしている。
ハッシュ法に基づく実装で、⾼速なデータアクセスを実現。
(説明不⾜な部分もあるので、各⾃調べてみてください。)
【所感】勉強不⾜。これまで、ただ何となく、動けばいいやのコーディング
→ トラッシュに⼊社してもう8ヶ⽉。もっと勉強、OUTPUTも⼼がけたい。
終わり
13

More Related Content

What's hot

JOIss2013
JOIss2013JOIss2013
JOIss2013
Shunya Satake
 
第3回Rを使って統計分析を勉強する会
第3回Rを使って統計分析を勉強する会第3回Rを使って統計分析を勉強する会
第3回Rを使って統計分析を勉強する会
Nobuto Inoguchi
 
K030 appstat201203 2variable
K030 appstat201203 2variableK030 appstat201203 2variable
K030 appstat201203 2variablet2tarumi
 
論文紹介&実験
論文紹介&実験論文紹介&実験
論文紹介&実験
SHINGO MORISHITA
 
第1回Rを使って統計分析を勉強する会
第1回Rを使って統計分析を勉強する会第1回Rを使って統計分析を勉強する会
第1回Rを使って統計分析を勉強する会
Nobuto Inoguchi
 
NIPS 2012 読む会
NIPS 2012 読む会NIPS 2012 読む会
NIPS 2012 読む会
正志 坪坂
 
多次元配列機能比較
多次元配列機能比較多次元配列機能比較
多次元配列機能比較
Masahiro Tanaka
 
アルゴリズムとデータ構造11
アルゴリズムとデータ構造11アルゴリズムとデータ構造11
アルゴリズムとデータ構造11
Kenta Hattori
 
Tokyo r #37 Rubin's Rule
Tokyo r #37 Rubin's RuleTokyo r #37 Rubin's Rule
Tokyo r #37 Rubin's RuleHiroki Matsui
 
データ解析のための統計モデリング入門3章後半
データ解析のための統計モデリング入門3章後半データ解析のための統計モデリング入門3章後半
データ解析のための統計モデリング入門3章後半Shinya Akiba
 
みどりぼん3章前半
みどりぼん3章前半みどりぼん3章前半
みどりぼん3章前半
Akifumi Eguchi
 
アルゴリズムイントロダクション 14章「データ構造の補強」解説
アルゴリズムイントロダクション 14章「データ構造の補強」解説アルゴリズムイントロダクション 14章「データ構造の補強」解説
アルゴリズムイントロダクション 14章「データ構造の補強」解説
tks_uno
 
AIと代数幾何 ~8分版~/ Artifical Inteligence Parameter Space Transformation using Alg...
AIと代数幾何 ~8分版~/ Artifical Inteligence Parameter Space Transformation using Alg...AIと代数幾何 ~8分版~/ Artifical Inteligence Parameter Space Transformation using Alg...
AIと代数幾何 ~8分版~/ Artifical Inteligence Parameter Space Transformation using Alg...
Haruka Matsuzaki
 
化学科自主ゼミ1
化学科自主ゼミ1化学科自主ゼミ1
化学科自主ゼミ1
Hiroki Sato
 
IA14
IA14IA14
IA14
mfumi
 

What's hot (17)

JOIss2013
JOIss2013JOIss2013
JOIss2013
 
第3回Rを使って統計分析を勉強する会
第3回Rを使って統計分析を勉強する会第3回Rを使って統計分析を勉強する会
第3回Rを使って統計分析を勉強する会
 
K030 appstat201203 2variable
K030 appstat201203 2variableK030 appstat201203 2variable
K030 appstat201203 2variable
 
論文紹介&実験
論文紹介&実験論文紹介&実験
論文紹介&実験
 
第1回Rを使って統計分析を勉強する会
第1回Rを使って統計分析を勉強する会第1回Rを使って統計分析を勉強する会
第1回Rを使って統計分析を勉強する会
 
NIPS 2012 読む会
NIPS 2012 読む会NIPS 2012 読む会
NIPS 2012 読む会
 
多次元配列機能比較
多次元配列機能比較多次元配列機能比較
多次元配列機能比較
 
アルゴリズムとデータ構造11
アルゴリズムとデータ構造11アルゴリズムとデータ構造11
アルゴリズムとデータ構造11
 
Tokyo r #37 Rubin's Rule
Tokyo r #37 Rubin's RuleTokyo r #37 Rubin's Rule
Tokyo r #37 Rubin's Rule
 
データ解析のための統計モデリング入門3章後半
データ解析のための統計モデリング入門3章後半データ解析のための統計モデリング入門3章後半
データ解析のための統計モデリング入門3章後半
 
みどりぼん3章前半
みどりぼん3章前半みどりぼん3章前半
みどりぼん3章前半
 
アルゴリズムイントロダクション 14章「データ構造の補強」解説
アルゴリズムイントロダクション 14章「データ構造の補強」解説アルゴリズムイントロダクション 14章「データ構造の補強」解説
アルゴリズムイントロダクション 14章「データ構造の補強」解説
 
Rでプロット
RでプロットRでプロット
Rでプロット
 
ma92007id395
ma92007id395ma92007id395
ma92007id395
 
AIと代数幾何 ~8分版~/ Artifical Inteligence Parameter Space Transformation using Alg...
AIと代数幾何 ~8分版~/ Artifical Inteligence Parameter Space Transformation using Alg...AIと代数幾何 ~8分版~/ Artifical Inteligence Parameter Space Transformation using Alg...
AIと代数幾何 ~8分版~/ Artifical Inteligence Parameter Space Transformation using Alg...
 
化学科自主ゼミ1
化学科自主ゼミ1化学科自主ゼミ1
化学科自主ゼミ1
 
IA14
IA14IA14
IA14
 

Recently uploaded

HRMOS-saiyo_overview_material_powred_by_bizreach
HRMOS-saiyo_overview_material_powred_by_bizreachHRMOS-saiyo_overview_material_powred_by_bizreach
HRMOS-saiyo_overview_material_powred_by_bizreach
gmiki1
 
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
ssuser4eac57
 
kintone Café 山口 Vol.8 kintone×UiPath.pdf
kintone Café 山口 Vol.8 kintone×UiPath.pdfkintone Café 山口 Vol.8 kintone×UiPath.pdf
kintone Café 山口 Vol.8 kintone×UiPath.pdf
takashihashimoto14
 
【スポンサープラン】Marketing Native Fes 2024summer
【スポンサープラン】Marketing Native Fes 2024summer【スポンサープラン】Marketing Native Fes 2024summer
【スポンサープラン】Marketing Native Fes 2024summer
yutooyama
 
The AI service "MMOL Pot (MMOT)" by MMOL Holdings
The AI service "MMOL Pot (MMOT)" by MMOL HoldingsThe AI service "MMOL Pot (MMOT)" by MMOL Holdings
The AI service "MMOL Pot (MMOT)" by MMOL Holdings
mikidaisuke
 
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
ssuserdc1268
 
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
DAISUKE NAKAMURA
 
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
recruit9
 
intra-mart Accel series 2024 Spring updates
intra-mart Accel series 2024 Spring updatesintra-mart Accel series 2024 Spring updates
intra-mart Accel series 2024 Spring updates
NTTDATA INTRAMART
 
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
ytakahashi4
 
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
Members_corp
 

Recently uploaded (11)

HRMOS-saiyo_overview_material_powred_by_bizreach
HRMOS-saiyo_overview_material_powred_by_bizreachHRMOS-saiyo_overview_material_powred_by_bizreach
HRMOS-saiyo_overview_material_powred_by_bizreach
 
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
研究エンパワープラットフォームを提供するLabBaseから理系採用成功に向けたご提案
 
kintone Café 山口 Vol.8 kintone×UiPath.pdf
kintone Café 山口 Vol.8 kintone×UiPath.pdfkintone Café 山口 Vol.8 kintone×UiPath.pdf
kintone Café 山口 Vol.8 kintone×UiPath.pdf
 
【スポンサープラン】Marketing Native Fes 2024summer
【スポンサープラン】Marketing Native Fes 2024summer【スポンサープラン】Marketing Native Fes 2024summer
【スポンサープラン】Marketing Native Fes 2024summer
 
The AI service "MMOL Pot (MMOT)" by MMOL Holdings
The AI service "MMOL Pot (MMOT)" by MMOL HoldingsThe AI service "MMOL Pot (MMOT)" by MMOL Holdings
The AI service "MMOL Pot (MMOT)" by MMOL Holdings
 
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
株式会社ROMS採用候補者用説明資料。候補者の方向け事業概要・沿革・カルチャーをご紹介
 
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
株式会社ジンザイベース/特定技能外国人紹介に関する提案資料/2024ver///
 
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
【公開用】株式会社VISIONARY JAPAN_エンジニアチーム 採用資料(ver2.1)
 
intra-mart Accel series 2024 Spring updates
intra-mart Accel series 2024 Spring updatesintra-mart Accel series 2024 Spring updates
intra-mart Accel series 2024 Spring updates
 
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
【株式会社ゆめみ】 会社紹介 & 実績資料 ≫≫Saleshub_企業様向け≪≪
 
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
株式会社メンバーズ社内報MEMBUZZ(メンバズ)2024年4・5月合併号(♯168,169)
 

Hash mapとは