あらかじめ日記

雑記とかブログで使えるスクリプトとかテクニックとか。その他、音楽やアニメ、漫画の話題とかも。

【C++ C# JAVA】動的配列クラスのまとめ(備忘録)【コンテナ、コレクション】


以前から少し勉強していたC#に加えて、最近JAVAもかじり始めました。

おそらくかなり早い段階で、かつ以後お世話になると思われる動的配列のクラスですが、実はちょっと名前に騙されそうなところがあったので、自信の備忘録がてら残しておきます。

各言語別の対比

 
List
list
LinkedList
LinkedList


は配列をメモリ上に必要なサイズを一括して確保するのでランダムアクセス(特定の位置の要素に直接アクセスする)に強いが、その代わりに(確保したサイズが変更されるような)配列の途中への要素追加・削除に弱い。

は各要素を断片的に確保してそれぞれの繋がりを持つので、ランダムアクセスに弱いが、配列の途中への要素追加・削除に強い。

似てる名前に惑わされない

表を見ると分かるのですが、同じ名前だけど仕様が異なるヤツがいますね。Listです。
C++をやっていて、C#に手を染めると思わず同じノリで使ってしまうところではないでしょうか。(て、自分だけなのかも・・・)

さらに闇?が深いのは、C#にも実はArrayListが存在しており、仕様的にはC#ListJAVAArrayListと同じ。

せっかくJAVAと同じ名前にしてるのに.NET Framework 2.0ジェネリック(<T>で型指定するやつ)の仕組みが登場する前のクラスのため、新たにジェネリック用のクラスを用意したいが、既にArrayListと言う名前を使ってしまったので、仕方なく「List」としたのか?と言う妥協が伺えます。
Listと違い型指定をしないため、要素をObject型としてボックス化される=取り出しにキャストが必要なので、もはや、ArrayListの使い道ってほとんど無いと思うのでゾンビ化したクラス名となっていたのでした。。



ちなみに、JAVA学習用に買った参考書。

まだ必要なところを抜粋して読んだくらいですが、評判通り分かりやすく広範囲に知識吸収ができそうな内容でおすすめです。
初心者向けの入門編もありましたが、自分は不要と思って実践編から。JAVAは全くの初心者でしたがC#をかじっていたお陰か問題なく読み始められました。
なぜか説明の題材がRPGなんですけど、敷居を低くした工夫なんでしょうか。(ちなみに、題材がRPGなだけでこれを読めばJAVARPGが作れるわけではありません。笑)

ただ、SwingとかのGUIまわりを詳しく知りたかったのですが、その辺の記載は無かったのは残念なところでしたね。