ArrayList的自定义方法

时间:2017-04-05 10:03:09

标签: java arraylist

您好我想为ArrayList类创建一个自定义方法。

让我说我制作一个新的ArrayList。

ArrayList<String> list = new ArrayList<String>

我想制作一个我可以在列表上调用的方法。 像这样:

list.myMethod();

我想用我的方法解决的问题是你可以获得一个Object by Object名称,而不是在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)并得到相同的结果。我希望你理解我的问题。我知道这可能是一个愚蠢的解决方案,我可以使用Map。但这仅用于学习目的,我将不会使用任何内容。

3 个答案:

答案 0 :(得分:4)

自定义方法&gt;&gt;

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

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

}

如何使用&gt;&gt;

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

答案 1 :(得分:3)

您需要扩展ArrayList类,但您应该考虑使用

var dateFormat = "01/05/2099";
var dateMissing = "25/11/2016";
var parts, dt1, dt2;
var parts = dateFormat.split("/");
var dt1 = new Date(+parts[2], +parts[1] - 1, +parts[0]);
parts = dateMissing.split("/");
var dt2 = new Date(+parts[2], +parts[1] - 1, +parts[0]);
if (dt1 > dt2) {
    dateFormat = dateMissing;
}
console.log("dateFormat:", dateFormat);
console.log("dt1", dt1.toString());
console.log("dt2", dt2.toString());

通过这种方法,您可以执行类似

的操作
Map<String, Object>

答案 2 :(得分:3)

您应该使用新方法扩展ArrayList类创建自己的类。但如果你的名单增长太多,表现会很糟糕。 indexOf方法有O(n),因此您需要等待的时间越长,数组越大。

如果您想直接访问该元素,可能应该选择其他集合。在您的情况下,存储在集合中的元素是唯一的,您可以使用Set

另一方面,Set不保留插入顺序。我不知道这是否是你认为必须要关心的。

Set只是告诉您元素是否包含在集合中。

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

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