なぜVectorを使う意味がほとんど無いのでしょう?

このQ&Aのポイント
  • JAVA PRESS vol.26によると、Listインターフェースを実装したクラスはArrayList, LinkedList, Vectorの3種類ですが、Java2では通常はArrayListかLinkedListを選択することが推奨されています。
  • Vectorはメソッドが多くて使い勝手は良さそうですが、Java2では同期化されるため処理が遅くなるというデメリットがあります。
  • 一般的にはArrayListやLinkedListの方が効率的でスレッドセーフでない場合にはsynchronizedを使用することで同期化することができます。そのため、Vectorを使用する必要性はほとんどありません。
回答を見る
  • ベストアンサー

Vector、ArrayList、LinkedListについて

JAVA PRESS vol.26に「Listインターフェースを実装したクラスは ArrayList,LinkedList,Vectorの3種類ですが、Java2ではVectorを 使う意味はほとんどないので、通常は残りの二つのクラスから選択 します」という記述があったのですが、なぜVectorを使う意味が ほとんど無いのでしょう? パっと見た限りVectorはメソッドが多くて使い勝手が良さそうな 便利そうなクラスだと思うし、「同期化」されるというのも 他の2クラスと違う点ですよね? 決して使う意味がない、とは思わないのですが。 みなさんはどうお考えでしょうか? よろしくお願い致します。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

> パっと見た限りVectorはメソッドが多くて使い勝手が良さそうな > 便利そうなクラスだと思うし、「同期化」されるというのも > 他の2クラスと違う点ですよね? synchronize については、リファレンスに記述がありますね。   List list = Collections.synchronizedList(new ArrayList(...)); 一行だけなので、別にたいした手間ではない、と。 列挙も enumration だし、わざわざ古い実装を混ぜてまで使う意味がない、ということかな。 メソッドが多く見えるのは、気のせい。基底クラスから継承したメソッドにかかれているか、いないかの違い。

masamisss
質問者

お礼

なるほど。確かに継承したメソッドがいっぱい書かれているんですね。>VECTORクラス しかもsyncronizeは1行で済むし、使う必要がないんですね。 ありがとうございました。

関連するQ&A

  • ArrayListはListのデフォルト実装とは?

    「ArrayListはListのデフォルト実装」と書いてあるのですが、どういう意味でしょうか? http://topickup.web.fc2.com/java/list_arraylist.html ■自分の理解 ・List … インターフェイス ・ArrayList … インターフェイスを実装するクラスの中の一つ。どの実装クラスを利用するかはユーザーが選択? ■疑問点 ・Listインターフェイスのリファレンスに、デフォルト実装について明記されているかと思ったのですが、見つかりません ・どこかに書いているのでしょうか? http://docs.oracle.com/javase/jp/7/api/java/util/List.html ・検索したら、似た言葉で「デフォルトメソッド」があるのですが、「デフォルト実装」と同じ意味でしょうか? ・「デフォルトメソッド」はJava8の新機能? Java7以下では使えない?

    • ベストアンサー
    • Java
  • ArrayListのパッケージがlistでない理由

    ・パッケージについて教えてください ■質問1 ・ArrayListのパッケージは、どうして「java.util.List」ではなくて「java.util.ArrayList」なのでしょうか? ・ArrayListは、Listインターフェイス実装クラスなのでListに紐付いている、と思ったのですが… ・「java/util/List.interface」と「java/util/ArrayList.class」は並列の位置づけになるのでしょうか? ・そういう決まりだから? ・Listインターフェイスのパッケージ名は下記で確認するのでしょうか? ・http://docs.oracle.com/javase/jp/7/api/java/util/List.html ■質問2 ・「import java.util.*;」表記ができるなら、全部これで良いようにも思うのですが、どういう風に使い分けるのでしょうか? ・普通はどちらを使う、とかあるのでしょうか?

    • ベストアンサー
    • Java
  • Javaコレクションフレームワークの、クラス型とインタフェース型の使い分けについて

    Javaコレクションフレームワークの、クラス型とインタフェース型の使い分けについてですが、 newで作ったインスタンスを、 クラス型に代入する場合と、インタフェース型に代入する場合があるのですが、どちらを優先して使ったほうがいいですか? ※物によっては、インタフェース型しかつかえないとか、どちらでも良い場合とかいろいろあると思います。 また、インタフェース型のほうがメソッドの種類が若干多いですが、抽象メソッドなのでオーバーライドして使うからそれは関係ないのかな。 ・本に出てきた例 ArrayList<E> list = new ArrayList<E>(); List<E> list = new ArrayList<E>(); Queue<E> queue = new LinkedList<E>(); LinkedList<E> list = new LinkedList<E>(); LinkedList<E> stack = new LinkedList<E>(); Set<E> set = new HashSet<E>(); Map<E, M> map = new HashMap<E, M>();

    • ベストアンサー
    • Java
  • VectorとArrayListの違い

    お世話になっています。 VectorとArrayListやHashTableとHashMapなど、同期型と非同期型のクラスなどありますよね。 これらは具体的にどのようなときに使い分ければ良いのでしょうか? 私の考えでは、どの場面でもArrayListやHashMapを使っても問題ないと思ってしまいます。 マルチスレッドでスレッドが生成される前に生成されたListオブジェクトを参照した場合には予想と異なる動きをしそうですが、それ以外では全く問題ないように思います。 どの様に使い分ければよいのでしょうか?

    • ベストアンサー
    • Java
  • ArrayList

    課題プログラムの中で、いくつかArrayListを使ったメソッドを作って動かすものが出題されているのですが、そのうち「ArrayListの文字を反転させて出力する」というのがわかりません。 何を使ったらよいでしょうか? ちなみに、私の書いたプログラムの中では、 ArrayList<String> list = new ArrayList<String>(); としていますので、それで書いて下さると嬉しいです。 また、課題の中で、listの中に入っているのは、String型のアルファベット10個です。 教えて下さい、よろしくお願いします。 ▼参考API http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/util/ArrayList.html

    • ベストアンサー
    • Java
  • ArrayListなどのソート

     いつもお世話になっています。ArrayListなどをソートする際に、Comparatorインターフェースを実装したクラスを利用して、辞書順や数値順などでソートすることは出来ますよね。これを任意の単語の順番にソートするにはどのようにすればよいのでしょうか。つまり、下記例において、文字列順ではなくて、"ONE", "TWO", "THREE", "FOUR"の順番にソートしたいのです。 ArrayList list = new ArrayList(); list.add("THREE"); list.add("ONE"); list.add("FOR"); list.add("TWO");  やはりcompare()メソッド内で総当り的に比較するしかないのでしょうか。  開発環境はJDK1.4です。事情により返答が遅れてしまうかもしれませんが、どうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • Java : インターフェースについて

    List<String> list = new LinkedList<String>(); という宣言がありますが、これは本当に意味があるのでしょうか? 「呼び出し側が LinkedList の実装コードを意識せずにメソッドを呼び出すことができ、呼び出し側コードの再利用性と抽象性を高めることができる」 ということが考えとしてあるのかもしれませんが、この正当性がイマイチ理解できません。少なくとも、呼び出し側のコードも、ある程度は LinkedList か ArrayList かは考慮した上でのコードディングをしていないでしょうか(ランダムアクセスしやすいうんぬん)。List で宣言されていることにどれだけの意味があるのでしょうか? また、実際問題、list のメソッド使った際 Eclipse のコードジャンプで LinkedList の実装コードが一発で見れないため、どのような実装になっているのか調べたいときにすぐに確認できないというのも個人的には問題に感じます。 この宣言に本当に意味はありますか?本当に抽象化できていますか? 詳しい方よろしくお願いいたします。

  • Javaのプログラムについての質問です。

    Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。 注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。 以下は極最初期のソースになります。 import java.util.List;  public interface Interface{   int size();   boolean add();   boolean remove();   void clear();   get();   set();  } public class LocalList implements Interface{ class Main implements LocalList {  public static void main(String[] args) {     } } Listインターフェースについてネットで調べてはいるのですが、具体的な解決方法が見えてきません。 どなたか参考ソースや考え方などを教えていただけないでしょうか。よろしくお願い致します。

  • Vector、ArrayListnの同期化とは?

    今晩は、javaの勉強中の者です、宜しくお願いします。 Vector、ArrayListを勉強中ですが、《「同期化」されるものとされないの違い》と解説された サイトがありました。 また、最近はArrayListの方が良く使われるともありました。 この「同期化」とは何と何の「同期化」でしょうか。 ArrayListの方が良く使われる理由はどのあたりなのでしょうか。 宜しくお願いします。

    • ベストアンサー
    • Java
  • VectorクラスとRunnableインターフェース

    こんにちわ。 Java初心者です。 Vector クラスとrunnable インタフェースを実装したスレッドを用いたプログラムを作成中で、自分でも中身が分からなくなってきたうえにMainメソッドの位置が分からなくなってしまいました; 名前の表示が実行できるようにどなたか修正をお願いいたします。 現段階のソースは以下です。 import java.util.*; public class NameList implements Runnable{ private Thread t = null; private Vector list = new Vector(); public void Name(){ List<String> list = new ArrayList<String>(); list.add("Ayane"); list.add("Akiyo"); list.add("Asami"); list.add("Hanabi"); list.add("Meg"); list.add("Michiru"); list.add("Mika"); list.add("Reina"); } public void run(){ while (true){ System.out.println(list.get(0)); try{ Thread.sleep(1000); } catch (InterruptedException e){ break; } } } public void start(){ if(t == null){ t = new Thread(this); t.start(); } } }

    • ベストアンサー
    • Java

専門家に質問してみよう