elementAt()とget()の違い

このQ&Aのポイント
  • JavaのVectorにおけるelementAt()とget()メソッドの違いについて教えてください。
  • elementAt()は指定されたインデックスの要素を取得するメソッドであり、get()も同じく指定された位置の要素を取得するメソッドです。
  • ただし、どちらのメソッドもほぼ同じ実装であり、役割も同じです。なぜ同じ役割のメソッドが存在しているのかを教えてください。
回答を見る
  • ベストアンサー

elementAt()とget()の違い

JavaのVectorでの話です。 この2つのメソッドについての違いを教えて欲しいです。 http://docs.oracle.com/javase/jp/1.4/api/java/util/Vector.html によると elementAt(int index) 指定されたインデックスの要素を返します。 get(int index) Vector 内の指定された位置にある要素を返します。 なのですが、今私が作っているプログラムでは、どちらでも正常に動きました。 調べてみると「ほぼ同じ実装」などと見かけます。もし同じなら、どうして役割の同じメソッドが存在しているのかも教えていただけると嬉しいです。

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

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

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

その説明に書いてあるような経緯です。 Vectorは Java 1.0 から提供されているクラスであり、当初はelementAtメソッドだけ提供されていました。 Java 1.2のリリースの際、Java Collections Frameworkとして、VectorクラスはListインタフェースを実装しました。 Listインタフェースの実装により、getメソッドも提供されるようになったわけです。

newtgecko
質問者

お礼

ご回答ありがとうございます。 この前もお世話になりましたm(_ _)m ちょっと専門用語にも弱く、まだまだわからない所も多いのですが、「Listインタフェース」を少し調べてみました。 なんとなくわかったことですが、メソッド名を統一(?)したかったということでしょうか? 使う人に分かりやすくするためにということでしょうか? http://docs.oracle.com/javase/jp/1.3/api/java/util/List.html を見てみました(メソッド名をちらっと見ただけです)。 ネーミングが分かりやすい(よく見るメソッド名)と思いました。

その他の回答 (1)

  • teketon
  • ベストアンサー率65% (141/215)
回答No.2

> なんとなくわかったことですが、メソッド名を統一(?)したかったということでしょうか? その認識で合っています。Java Collections Frameworkはコレクションに対して、 共通のメソッドを提供するために導入された概念です。 Listインターフェスを実装していれば、どのクラスも同様の操作ができることを目的としています。

newtgecko
質問者

お礼

「お礼」へのご回答ありがとうございます。 よくわかりました。先のご回答にあったとおり、 >Listインタフェースの実装により、getメソッドも提供されるようになったわけです。 とういうのを抑えておきます。 ありがとうございました。

関連するQ&A

  • Objective-Cでのスタックについて

    Javaでは public Stack() で簡単にスタックを実装できますが、Objective-Cではどのように実装すれば良いのでしょうか? 出来る限り簡単に実装できると良いのですが・・・。 ■参考 Stack (Java Platform SE 6) http://docs.oracle.com/javase/jp/6/api/java/util/Stack.html

  • 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
  • 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
  • Javaの公式メソッドの中身を見るには?

    Javaの公式なメソッドやクラスの中身を見るにはどうすればいいでしょうか? jTextAreaクラスに、指定した位置に文字列を挿入する、 「insertメソッド」というメソッドがあるのですが、 このメソッドがどういうアルゴリズムかを勉強したいのですが、 JavaのAPIを見ても、引数や説明があるだけで、中のソースがありません。 http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/JTextArea.html#insert%28java.lang.String,%20int%29 何か中身を見る方法ありませんか?

    • ベストアンサー
    • Java
  • javaのプログラミングについての質問です。

    Javaのプログラムについての質問です。長くなってしまいますがご容赦下さい。 Listインターフェースの実装クラスの自作と、作成したクラスの全メソッドを呼び出すサンプルを作成せよ、という問題です。以下が現在までに作成したコードになります。 注意点として、java.util.Listの実装クラスは使用出来ません(ArrayListなど)。実装するメソッドは、コードの中にコメントを振ってあります。 import java.util.List; import java.util.Collection; import java.util.Iterator; import java.util.ListIterator; class Mylist implements List{   private int Count;   private String Data[];   // コンストラクタ   public Mylist(){    Data = new String[10];    Count = 0;   } /** 実装するaddメソッド @return boolean APIの設定に従う @param e エレメント(要素) **/   public boolean add(E e){    Data[Count] = (String)e;   Count++;   return true;   }   public void add(int i,Object str){   }   public boolean addAll(Collection c){     return false;   }   public boolean addAll(int i,Collection c){     return false;   } /** 実装するclearメソッド **/   public void clear(){     Count = 0;   }   public boolean contains(Object str){     return false;   }   public boolean containsAll(Collection c){     return false;   }   public boolean equals(Object str){     return false;   } /** 実装するgetメソッド @return E エレメント(要素) @param i 指定されたインデックス番号 **/   public E get(int i){      /*     エレメントeに、String型Data[i]を     キャストして格納*/     E e = (E)Data[i];     return e;   }   public int hashCode(){     return -1;   }   public int indexOf(Object str){     return -1;   }   public boolean isEmpty(){     return false;   }   public Iterator iterator(){     return null;   }   public int lastIndexOf(Object str){     return -1;   }   public ListIterator listIterator(){     return null;   }   public ListIterator listIterator(int i){     return null;   }    /**   * 実装するremoveメソッド   * @return E エレメント(要素)   * @param index 指定されたインデックス番号   **/   public E remove(int index){ /* Dataを最大まで回し、iをインクリメントしたData[i++]を String型Dataに格納する*/ for(int i = index; i < Data.length; i++){ Data[i] = Data[index++]; } Count--; E e = (E)Data; return e; } public boolean remove(Object str){ return false; } public boolean removeAll(Collection c){ return false; } public boolean retainAll(Collection c){ return false; } /** * 実装するsetメソッド * @return E エレメント(要素) * @param i 指定されたインデックス番号 * @param element 置き換える要素 **/ public E set(int i,E element){ // String型Dataにelementをキャストして格納 Data[i] = (String)element; // エレメントeにData[i]をキャストして格納 E e = (E)Data[i]; // 値を返す return e; } /** * 実装するsizeメソッド * @return int 指定されたインデックス番号 **/ public int size(){ return Count; } public List subList(int i,int j){ return this; } public Object[] toArray(){ return Data; } public Object[] toArray(Object[] a){ return Data; } } class Main { /** メインメソッド **/ public static void main(String args[]) { Mylist sub = new Mylist(); /* addメソッドを実装し、機体名を要素とする。 addを最大まで回し、getメソッドで要素を取り出して表示する*/ sub.add("ビルドバーニングガンダム"); sub.add("ライトニングガンダム"); sub.add("ウイニングガンダム"); sub.add("ガンダムフェニーチェリナーシタ"); sub.add("R・ギャギャ"); sub.add("ユニコーンガンダム"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // sizeメソッド System.out.println("\r\n" + "機体数は" + sub.size() + "です" + "\r\n"); // setメソッド sub.set(0,"ガンダムエピオン"); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // 改行 System.out.println(); // removeメソッド sub.remove(1); for(int i = 0; i < sub.size(); i++){ System.out.println(sub.get(i)); } // clearメソッド sub.clear(); System.out.println("\r\n" + "機体数が" + sub.size() + "になったので負けです"); } } コンパイルして実行すると、removeメソッドで指定した箇所ではなく、要素の1番最後が削除されています。思うに、removeメソッドを実装する所のfor(int i = index; i < Data.length; i++){の中の条件が違うと思うのですが。。。。 また、現在addには10個箱を作成するようにしていますが、11個目をメインクラス内で用意した場合、例外ではなく新たに箱を作らなければならない、という後だしジャンケン的な事を言われて、思わず「じゃあArrayListでいいじゃないか」と思ってしまいました。 気を取り直してこの3連休で終わらせたいと思っています。ここまでで現状コードの完成は50%かそれ以下だとは思いますが、どなたか上記2点について御教授頂けないでしょうか。よろしくお願い致します。

  • javaの中でaddElementは何ですか?

    javaの中でaddElementは何ですか? import java.util.*; public class StringVector{ public static void main(String[] args){ Vector<String> v = new Vector<String>(); v.addElement("hello"); v.addElement("World"); for(String s : v){ System.out.println(s); }}} http://java.sun.com/javase/ja/6/docs/ja/api/ でも探してみましたが。。

    • ベストアンサー
    • Java
  • 「SimpleEntry を型に解決できません。」とエラーが出て悩んでます

    Eclipseでこのプログラムを実行しましたが, http://d.hatena.ne.jp/nowokay/20080707#1215460276 「SimpleEntry を型に解決できません。」 とエラーをはきます。 javaのバージョン違いかと思い,コマンドウィンドウを開いて,  java -version としましたが,version1.6.0_02 でSimpleEntryについて調べましたが, version1.6から採用しているらしく(http://java.sun.com/javase/ja/6/docs/ja/api/java/util/AbstractMap.SimpleEntry.html) 問題はない気がするのですが,何が原因なのかわかりません。 とにかくこのサイトのプログラムを一度実行してみたいです。 解決策を教えてください

  • javascriptからjavaを呼び出したい

    javascriptの勉強中です。 javascriptでajaxを用いてjavaのメソッドにアクセスし、結果をjavascriptに返す、という実装をしたいのですが上手く行きません。 流れとしては以下のようなものを想定しています。 js /project/WebContent/js/testJS.js(画面の値を引数としてtestJavaクラスのtestMethodメソッドを呼び出す) ↓ java /project/src/java/jp/co/application/util/testJava.java(受け取った引数の値をtestDAOクラスのtestDAOMethodメソッドに渡す) ↓ java /project/src/java/jp/co/application/dao/testDAO.java(受け取った値を用いてDBにアクセスし、結果をjsに返す) まず技術的に、同じプロジェクト内のjavaメソッドをjs上で呼び出し、結果を受け取るということは可能なのでしょうか。 ご教示お願いします。

  • IntArrayクラスのプログラムを組んでいるのですが・・・

    javaプログラミングで以下の内容を満たす、IntArrayクラスを作成しています。 ・インスタンス変数  int型の配列data ・コンストラクタ  (1)int型の配列を受け取り、そのコピーを内部的に保持する  (2)第1引数で指定された要素数を持つ配列を確保し、全ての要素に初期値として第2引数で指定された値をセットする  (3)第1引数で指定された要素数を持つ配列を確保し、全ての要素に初期値としてゼロをセットする ・メソッド  (1)sort   内部的に保持している配列を、引数の値がtrueであれば昇順、falseであれば降順にソートする  (2)length   IntArrayが保持している配列の要素数を取得する  (3)getElement   引数に指定された要素番号の値を取得する  (4)setElement   第1引数に指定された要素番号に第2引数で指定された値を格納する   (5)getArray   IntArrayが保持している配列のコピーを取得する 実際にプログラムを組んでみたのですが、※の部分が冗長だと指摘を受けました。 しかしどのように修正したらよいかわかりません。 どうかアドバイスなどをよろしくお願いいたします。 package java_Lesson; import java.util.Arrays; /** * int型の配列dataの要素を取得、あるいは操作するクラス */ class IntArray { private int[] data; /** * int型の配列を受け取り、そのコピーを内部的に保持する * * @param args コピー元となる配列 */ IntArray(int[] args) { data = (int[])args.clone(); } /** * 第1引数で指定された要素数を持つ配列を確保し、 * 全ての要素に初期値として第2引数で指定された値をセットする * * @param arg1 配列の要素数 * @param arg2 配列の初期値 */ IntArray(int arg1, int arg2) { this(arg1); /* ※ */ for (int index = 0; arg1 > index; index ++) { data[index] = arg2; } } /** * 第1引数で指定された要素数を持つ配列を確保し、 * 全ての要素に初期値としてゼロをセットする * * @param arg 配列の要素数 */ IntArray(int arg) { data = new int[arg]; } /** * 内部的に保持している配列を昇順、あるいは降順にソートする * * @param arg trueであれば昇順、falseであれば降順にソート */ void sort(boolean arg) { Arrays.sort(data); if (arg) { return; } int array = data.length - 1; for (int index = 0; array > index; index ++, array --) { int temp = data[index]; data[index] = data[array]; data[array] = temp; } } /** * IntArrayが保持している配列の要素数を取得する * * @return 配列の要素数 */ int length() { return data.length; } /** * 引数に指定された要素番号の値を取得する * * @param arg 返す要素の要素番号 * * @return 配列dataの要素番号argの値 */ int getElement(int arg) { return data[arg]; } /** * 第1引数に指定された要素番号に第2引数で指定された値を格納する * * @param arg1 値を格納する要素番号 * @param arg2 配列に格納する値 */ void setElement(int arg1, int arg2) { data[arg1] = arg2; } /** * IntArrayが保持している配列のコピーを取得する * * @return 配列dataのコピー */ int[] getArray() { return data.clone(); } }

    • ベストアンサー
    • Java
  • コンパイルできません。

    public class test17{ double[] ary; /** *実数型の配列を引数にしたコンストラクタ */ public test17(double[] a){ } /** *要素の合計を求めるメソッド */ public double sum(){ } /** *要素の平均を求めるメソッド */ public double average(){ } /** *要素の最大値を求めるメソッド */ public double max(){ } /** *要素の最小値を求めるメソッド */ public double min(){ } /** *値を要素に持っているかどうかを確認するメソッド */ public boolean hasElement(double d){ } } kouzou@GD348ZZD9:/WORK$ javac test17.java test17.java:16: エラー: return文が指定されていません } ^ test17.java:23: エラー: return文が指定されていません } ^ test17.java:28: エラー: return文が指定されていません } ^ test17.java:35: エラー: return文が指定されていません } ^ test17.java:41: エラー: return文が指定されていません } ^ エラー5個

    • ベストアンサー
    • Java

専門家に質問してみよう