【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だけ勘違いしていたことがあったので一応書いておきます。
以上っす!