2017-04-05 13 views
2

こんにちはArrayListクラスのカスタムメソッドを作りたいと思います。ArrayListのカスタムメソッド

これで、新しいArrayListを作成することができます。

私はリストを呼び出すことができます。このような 何か:私は私の方法で解決したいことはある

list.myMethod(); 

ので、あなたはArrayListの内部のオブジェクト名によってオブジェクトではなく、インデックスを取得することができます。

list.get(list.indexOf(str)); 

がそれをまとめると::

ArrayList<String> list= new ArrayList<>(); 
    String str = "asd"; 
    String str2 = "zxc"; 
    list.add(str2); 
    list.add(str); 
    System.out.println(list.get(0)); 
    System.out.println(list.get(list.indexOf(str))); 

が印刷されます: "ASD" "ASD" を

だから基本的に私は、次の返すメソッドを作りたいです。

書く代わりに:list.get(list.indexOf(Object)) 私はlist.myMethod(Object)と書いて同じ結果を得たいと思います。あなたが私の質問を理解することを願っています私はこれがおそらくダムの解決策であることを知っています。私はマップを使うことができます。しかし、これは学習目的に過ぎず、私は何も使用しません。あなたが必要なもの

+0

'ArrayList'を拡張する独自のクラスを作成し、それを使用するか、あなたは常に静的を​​作成することができますメソッドは、 'public static Object find(Object o、List l){return l.get(l.indexOf(o));}'のように同じことをします。これはちょっと面倒です – AxelH

+1

私は分かりませんなぜあなたはこれをしたいのですか? '{" cat "、" dog "、" mouse "}'というリストがあるとします。 'list.myMethod(" cat ");'を呼び出すことで、 "cat"を含む文字列を取得できますか?あなたはすでに "cat"を含む文字列を持っています!あなたはそれをメソッドに渡しました。 – Michael

+0

「この例を理解しないでください」 - この例のポイントは何ですか?この質問は、文字列の文脈で使用されるとき意味をなさない。また、以前は「オブジェクト名」という言葉は一度も使用されていません。質問から欠けている詳細を推測するのは私の責任ではありません。私がする必要がないことを確認するのはOPの責任です。 – Michael

答えて

3

カスタムメソッド>>それを使用する方法

public class MyArrayList<E> extends ArrayList<E> { 

    public E getLastItem(){ 
     return get(size()-1); 
    } 

} 

>>

MyArrayList<String> list= new MyArrayList<>(); 
String str = "asd"; 
String str2 = "zxc"; 
list.add(str2); 
list.add(str); 
System.out.println(list.getLastItem()); 
+1

私は答えとしてこれを受け入れますが、あなたのメソッドを次のように変更しました: 'public E superGet(Object o){ return get(indexOf(o)); } ' – IdontwearString

+0

@Kerwin、解決策を説明する必要があります。私はこれが簡単だと知っていますが、誰かがこれを検索すると、これは簡単ではありません;) – AxelH

3

はのArrayList classsを拡張するために必要ですが、あなたはあなただけArrayListクラスを拡張する必要があります

myMap.get("myObject1"); 
+1

@ΦXocę笑Пepeúpaツはい私はマップを使うことができると知っていますが、私は "これはたぶんばかばかしい解決策で、私は地図を使うことができますが、これは学習目的であり、私は何も使用しません。 – IdontwearString

3

ような何かを行うことができ、代わりにそのアプローチと

Map<String, Object> 

を使用することを検討すべきです新しいメソッドで自分自身を作成する。しかし、あなたのリストが大きくなりすぎると、パフォーマンスはひどくなります。 indexOfメソッドにはO(n)がありますので、待機する時間は配列のサイズより長くなります。

要素に直接アクセスする場合は、別のコレクションを選択する必要があります。あなたの場合、コレクションに格納されている要素は一意で、Setを使用できます。

一方、Setは、挿入順序を保持しません。これがあなたが気にしなければならないと思うかどうかはわかりません。

そして、Setは、その要素がコレクションに含まれているかどうかを通知します。

興味のあるコレクションはMapです。これはKey-Valueコレクションです。

しかし、これだけのキーがある場合は、あなたのケースではないようです。

+1

申し訳ありませんので、パフォーマンス上の問題になります。 – IdontwearString

+0

['LinkedHashSet'](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html)または[' LinkedHashMap'](https:// docs。 oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)、これらは挿入順序を保持し、O(1)アクセス時間を持つことができます。 – freedev

関連する問題