2017-04-05 78 views
2

你好我想为ArrayList类做一个自定义的方法。ArrayList的自定义方法

因此可以说我做了一个新的ArrayList。

ArrayList<String> list = new ArrayList<String> 

我想做一个方法,我可以在列表中调用。 事情是这样的:

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

我不明白你为什么想要这样做。假设你有一个清单:'{“猫”,“狗”,“鼠标”}'。你想能够调用'list.myMethod(“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类里面,但你应该考虑使用替代

Map<String, Object> 

用这种方法,你可以这样做

myMap.get("myObject1"); 
+1

@ΦXocę웃Петúúpaツ是的我知道我可以使用地图,但正如我写的“我知道这可能是一个愚蠢的解决方案,我可以使用一个地图,但这只是为了学习的目的,没有我会用。 – IdontwearString

3

你应该只延长ArrayList类用新方法创建你自己的。但是如果你的名单增长过多,那么表现会很糟糕。 indexOf方法有O(n),所以数组的大小越大,你需要等待的时间越长。

如果您想要直接访问元素,可能应该选择其他集合。就你而言,它存储在集合中的元素是唯一的,你可以使用Set。另一方面,Set不保留插入顺序。我不知道这是不是你必须关心的。

Set只是让你知道元素是否包含在集合中。

您可能感兴趣的另一个集合是Map,这是一个关键值集合。

但鉴于你只有钥匙这似乎不是你的情况。

+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