このブログは99%ののほほんと1%のお菓子でできています。
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
こんちゃ(´・ω・)ノ
基礎中の基礎である。
コンピュータ5大装置。
この5大装置とは、
コンピュータを構成するための、基本的な概念もしくは構成要素。
1.入力装置
外部からのデータをコンピュータ内部に取り込むための装置。
キーボードやマウスなど
2.出力装置
コンピュータからデータを外部に出力装置。
ディスプレイやプリンタなど
3.記憶装置
・主記憶装置
揮発性があり、高速。演算装置から使うことができる装置。
メモリなど
・補助記憶装置
データなどを保存しておくための装置
ハードディスクやDVDやCDなど
4.演算装置
制御装置からの命令に従って、計算(演算)を行う装置。
CPUなど
5.制御装置
演算装置に命令を出して、演算させる装置。
CPUなど
※ この概念・構成要素を考えたのがジョン・フォン・ノイマンという方。
現代のコンピュータは全てこのノイマン型といえる。
ここまでが基礎。
これだけ分かれば、ここは大丈夫です。
基本情報の試験などではこのレベルでしょう。
ここからは勝手な考察。
読まなくても大丈夫。
ノイマン型コンピュータの5大装置ですが、
ヒントは人間のような気がします。
入力装置:目や口など、5感といわれる能力。
出力装置:声やボディランゲージなど表現すること。
記憶装置(主記憶):一時的に覚える能力。人間の脳内で覚える能力。
記憶装置(補助記憶):紙に書くなど、情報に残しておく。もしくは、残り続けるような記憶など。
演算装置:脳で計算や予測などをする能力。
制御装置:考える、手を動かすなど、体に命令を送る能力。
こんな感じで、結構人間に当てはまる気がしないでもない。
もしかしたら、ノイマンさんはコンピュータで人間を将来的に作ろうとしたのでは?
なんて、勝手な想像。
コンピュータはどんどん賢くなってるので、
いずれ映画のように人間と同じになる日がくるのかもね。
こんちゃ(´・ω・)ノ
今回は、String型の文字列結合について書きます。
通常、文字列と文字列を結合するときはどのようにしていますか。
---------------------------------------
String s1="おうどん";
String s2="食べたい";
s1+=s2;
---------------------------------------
こんな感じでしょうか。
これでも普通に文字列連結はできますが、
これは少し無駄な処理があります。
「s1+=s2;」は書き直すと、
「s1=new StringBuffer().append(s1).append(s2).toString();」
といった感じになっています。
これはString型が固定長文字列しか扱えないため、
可変長文字列を扱えるStringBufferに追加してからString型に戻しているのです。
これは効率的とは言えません。
このような文字列結合をループ文で回すときにパフォーマンスに違いがでます。
--------------------------------------
String s="最初";
for(int i=0 ; i<100 ; i++){
s+="追加するよ";
}
-------------------------------------
このループは一見普通に見えますが、
中では「new StringBuffer()」を100回行っていることになります。
オブジェクト生成を100回もやったら、パフォーマンスが落ちるのも当然でしょう。
これを解決する方法としては、
最初から可変長文字列が扱える型に変換して追加していけばいいだけです。
先ほどのループ文を修正します。
--------------------------------------
String s="最初";
StringBuffer sb = new StringBuffer(s);
for(int i=0 ; i<100 ; i++){
sb.append("追加するよ");
}
s=sb.toString();
-------------------------------------
となります。
上記の文字列結合だとStringBuffer は一回しか生成されていないので、効率的です。
◆おまけ
今回は可変長の文字列としてStringBufferを使用しましたが、
StringBuilderというクラスもある。
StringBuilderもか可変長文字列を扱え、ほとんどStringBufferと同じだが、
StringBufferはマルチスレッド対応型なのに対し、
StringBuilderはシングルスレッドしか考慮していない。
スレッドを考慮しない際に、StringBuilderはStringBufferより速かったりする。
この辺も使い分けれると素敵。