Quadrophenia

R社の新人エンジニア数人が更新しているブログです

【Java】配列とHashMapとArrayListの違い

基礎的ですが、とても重要な配列とHashMapとArrayListの違いについて書いておきます。

格納できる値について

まず、格納できる値がそれぞれ異なります。
配列 => 基本データ型、参照型いずれも可

int[] hoge = {1,2,3}//OK
String[] hoge2 = {"太郎","二郎","三郎"}//OK

ArrayList => 参照型のみ可

ArrayList<int> hoge = new ArrayList<>();//NG
ArrayList<String> hoge2 = new ArrayList<>();//OK

HashMap型 => キーと値ともに参照型のみ可

HashMap<int,String> hoge = new HashMap<>();//NG
HashMap<String,int> hoge2 = new HashMap<>();//NG
HashMap<String,String> hoge3 = new HashMap<>();//OK

基本データ型というのは、int,boolean,byte,char,short,float,long,doubleの8つの型で、それ以外は全て参照型だと思って良いらしいです。
(こちらの記事がわかりやすいです。『【Java】 基本データ型 と 参照型 の違い』)

長さの取得について

それぞれfor文などで回して使うことが多いと思いますが、その際に長さ(要素の数)を取得するメソッドが異なります。
それぞれ、

(配列).length();
(ArrayList).size();
(HashMap).size();

で取得することができます。

値の重複について

そして、値の重複が許されるかどうかについてですが、結論から言うと3つとも許されませんが、HashMapだけは自分で気をつける必要があります。
たとえば、

HashMap<String,String> map = new HashMap<>();
map.put("apple","ios");
map.put("apple","android");
System.out.println(map.get("apple"));
//android

みたいに同じキーを指定して書くと値が上書きされてしまいます。
配列とArrayListのキー(インデックス)が重複してはいけないことは直感的にわかると思うのですが、HashMapだけ勘違いしていたことがあったので一応書いておきます。

以上っす!