![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
Listインターフェースはそれを実装して新たなリストを作るための土台になるものです。
これをそのまま使うことはできません。
このインターフェースを使ってメソッドを適切に実装すれば、
新たに作ったクラスのインスタンスは、Listを要求するメソッドやコンストラクタに渡すことができます。
以下の例では、addとget以外のメソッドは適当に実装していますので、
実用的にするためにはほかのメソッドも完全に実装する必要があります。
import java.util.*;
class mylist extends Object implements List {
private int Count;
private String Data[];
private Iterator ite;
private ListIterator lite;
public mylist() { super();
Data = new String[10];
Count = 0;
};
public boolean add(Object str) {
if (Count >= 10) return(false);
Data[Count ++] = new String((String)str);
return(true);
};
public Object get(int i) { return((i >= Count) || (i < 0) ? "" : Data[i]); };
public void clear() { Count = 0; };
public Object[] toArray() { return(Data); };
public Object[] toArray(Object[] a) { return(Data); };
public int size() { return(Count); };
public boolean isEmpty() { return(Count == 0); };
public boolean contains(Object str) { return(false); };
public Iterator iterator() { return(ite); };
public boolean remove(Object str) { return(false); };
public Object remove(int i) { return(null); };
public boolean removeAll(Collection c) { return(false); };
public boolean containsAll(Collection c) { return(false); };
public void add(int i, Object str) {};
public boolean addAll(int i, Collection c) { return(false); };
public boolean addAll(Collection c) { return(false); };
public boolean retainAll(Collection c) { return(false); };
public Object set(int i, Object str) { return(null); };
public int indexOf(Object str) { return(-1); };
public int lastIndexOf(Object str) { return(-1); };
public ListIterator listIterator() { return(lite); };
public ListIterator listIterator(int i) { return(lite); };
public List subList(int i, int j) { return(this); };
}
public class list {
public static void main(String args[]) {
mylist MyList = new mylist();
MyList.add("abcd");
MyList.add("efgh");
System.out.println((String)MyList.get(-1) + (String)MyList.get(0) +
(String)MyList.get(1) + (String)MyList.get(2));
};
}
No.3
- 回答日時:
java.util.ListのAPIリファレンスには以下の記述があります。
>既知の実装クラスの一覧:
>AbstractList, ArrayList, LinkedList, Vector
上の4つがListインターフェイスを実装しているクラスいう事になります。
要するに上記4クラス、又はその派生クラスであればListインターフェイスに定義されているメソッドを自ら実装しなくても使う事ができるという事です。
極論を言えば、インターフェイスとはメソッドが存在する保証でしかありません。
インターフェイス自体に一意の処理コードが記述されている訳ではなくて、処理はimplementsされたクラス内で、そのクラス用途に合わせた形で様々な実装が施されます。
おおよそ、add()で追加、get()で取得と相場は決まっていますが、それは飽くまでもListインターフェイスのメソッドの実装者依存です(笑)全く違った結果にしようと思えば出来ない事はありません。
と、小難しい事を言いましたが、実際のプログラムを書く場合にはListインターフェイス実装クラスの中から自分の目的に一番合ったクラスを見つけて使う事になります。
ArrayList,Vector辺りが一番オーソドックスで使用頻度が高いクラスですので、先ずはその辺りから使用してみてはいかがでしょうか。
String a1=new String("AAA");
String b1=new String("BBB");
ArrayList al=newArrayList();
al.add(a);
al.add(b);
Object obj1=al.get(0);
String str1=(String)obj1;
System.out.println(str1);
Object obj2=al.get(1);
String str2=(String)obj2;
System.out.println(str2);
No.2
- 回答日時:
>interface java.util.List はインタフェースです。
インスタンスを生成することはできません。>とコンパイルエラーになってしまいます。
>インポートするListはjava.util配下のインターフェースでよろしいのでしょうか。
あーっごめんなさい。こっちのミスでした。
インターフェースはインスタンスを生成できないので、
Listを実装しているクラスを生成し、変数に代入するのです。
JavaのAPIドキュメント(持ってますよね)のListの項をみると、
既知の実装クラスの一覧のところに、ArrayListとかLinkedListとかが
あります。
List list = new ArrayList();
のようにしてインスタンスを生成すればいいのです。
「既知の実装クラス」なら、原則的にはどれでもいいのですが、
AbstractListは抽象クラスでインスタンスを生成できません。
またVectorは、スレッド処理には強いですが、スレッドを使わないときは
若干動作が遅くなります。
通常は、ArrayListかLinkedListのどっちかを使います。
どちらを使ってもかまいません。
「ものを入れるのに、鞄を使うか、リュックを使うか」と言うぐらいのちがいです。
どっちにしてもものを入れられることにかわりはありません。
(ただし、「普通ならArrayListの方が早い。List要素の削除や追加が頻繁に
起きるのだったらLinkedListの方が早い」という傾向はあります。)
No.1
- 回答日時:
>listは初期化されていませんとエラーになります。
初期化されてないのです。終わり。
(↑おいおい)
listは、他のオブジェクトを入れるためのものですが、
これ自体もやはりオブジェクトです。
newによって生成しなければなりません。
具体的には
List list = new List();
とします。これでlistに格納することができます。
Listからオブジェクトを取り出すには大きく分けて二つの方法があります。
ひとつはインデックスで取得する方法。
Listの大きさを返すsize()メソッド、
Listのn番目の要素を返すget()メソッドを使って、
for(int i=0;i<list.size();i<++){
Object o = list.get(i);
....
}
とすると格納されたオブジェクトを得ることができます。
ちょっと面倒なのは、要素はObjectの状態で出てくることです。
使うにはもとのクラス型にもどしてやらなければなりません。
上で得られたオブジェクトがAClassのものだったら、
AClass c = (AClass)o;
というふうにキャストしてやります。
(ただしもとのオブジェクトが別の型であった場合、
ここでエラーがおきます。注意すべきところです。)
取り出す方法のもう一つは、Iteratorを使うことです。
Iterator iterator = list.iterator();
while(iterator.hasNext()){
Object o = iterator.next();
...
}
というように使います。
説明は面倒なので
『オブジェクト指向における再利用のためのデザインパターン』
のIteratorの項を参考にしてください。
どっちを使えばいいかですが、
オブジェクト指向な人には後者の方が評判のいい方法です。
(Iteratorを使うと、作業途中のlistの要素に対し、追加や削除ができる)
しかしややこしく感じるようなら前者でもかまわないでしょう。
この回答への補足
List list = new List();のとこなんですが、
interface java.util.List はインタフェースです。インスタンスを生成することはできません。
とコンパイルエラーになってしまいます。
インポートするListはjava.util配下のインターフェースでよろしいのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- VPN 何これ 1 2022/04/19 01:32
- 邦楽 ネガティブな精神状態をポシティブな精神状態に変えてくれて勇気や希望や元気を与えてくれる曲 7 2022/05/24 12:30
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
継承したクラス側のクラス名の取得
-
C# 定数定義
-
c++,ある関数のクラスから別の...
-
ファクトリーパターンの適用の仕方
-
explicitの定義は?
-
相互的な検索のできるハッシュ...
-
Javaデザインパターンハンドブ...
-
正常にビルドされたのに起動さ...
-
型Containerのメソッドadd(S...
-
RPGの主人公、町人、敵キャラの...
-
private変数を設定(Java)
-
仮想関数と継承について
-
C#にて別クラスの関数を使いたい
-
違うクラスからの変数の共有化
-
C++ シングルトン マルチスレッド
-
C++ クラス名の前のdefine
-
visual studioのデザイナ画面で...
-
C++のテンプレート関数やテンプ...
-
GOF本のデザインパターンのComp...
-
3種類の連想配列(java)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
クラス間でのデータ参照
-
範囲外の数値を代入したらエラ...
-
関数内の変数に<summary>コメン...
-
c++,ある関数のクラスから別の...
-
C#にて別クラスの関数を使いたい
-
java-別クラスの変数の使い方を...
-
a href="..." とServlet
-
C++でfriendクラスにしているの...
-
親クラスから子クラスへアクセス。
-
構造 他のクラスの構造体を別...
-
Java リフレクションについて
-
import と extends について
-
C#でほかのファイルにある自作...
-
C#のクラスライブラリでメッセ...
-
Java
-
アップキャスト、ダウンキャス...
-
無名パッケージからのインポート
-
違うクラスからの変数の共有化
-
SwingでgetContentPaneのエラー...
-
ひとつのファイルにクラスは1つ?
おすすめ情報