在arrayList Java

时间:2018-04-29 14:58:42

标签: java object arraylist

package generics;

import java.util.ArrayList;
import java.util.List;


public class Generics {
    private static List <Box> newlist = new ArrayList<>();

    public static void main(String[] args) {

        newlist.add(new Box("charlie",30));
        newlist.add(new Box("max",29));
        newlist.add(new Box("john",22));

        // Testing method find -- Start
        find ("max",29);


        //Testing method find2 -- Start
        Box <String,Integer> search = new Box("max",29);

        find2(search);

    }

    public static void find (String parameter, Integer parameter1){

        for (Box e : newlist){
            if(e.getName() != null && e.getMoney() !=null 
                                   && e.getName().equals(parameter)
                                   && e.getMoney().equals(parameter1)){
                System.out.println("found on position " + newlist.indexOf(e));
                break;
            }

        }

    }

        public static void find2 (Box e){
        for (Box a : newlist){
            if (a.equals(e)){
                System.out.println("Found");
            }else {
                System.out.println("Not found");
            }
        }
    }
}


public class Box<T , D>{


    private T name;
    private D money;

    public Box(T name, D money) {
        this.name = name;
        this.money = money;
    }

    public T getName() {
        return name;
    }

    public D getMoney() {
        return money;
    }

    @Override
    public String toString() {
        return name + " " + money;
    }

}

有人可以告诉我如何在ArrayList中搜索对象。

方法 find() 它运作完美,但在我看来是错误的 我这样想的原因,因为我作为参数传递一个字符串和一个整数,但应该是一个盒子对象,或者我错了?

在我的第二种方法 find2() 我试图将参数传递给Box的对象,当我尝试搜索它时,我得到了一个错误的结果= (

我是noobie我想要了解和学习。

3 个答案:

答案 0 :(得分:0)

你应该在Box类上覆盖Object.equals()。 尝试正确处理null。因为具有空名称和/或空钱的2 Box实际上是相等的。

(你不需要为此覆盖Object.hashCode(),但这样做是个好习惯,以防万一在hashmap或hashset中使用它。)

答案 1 :(得分:0)

停止使用原始类型!

Box是通用的,因此如果您不是针对较旧的Java版本,始终会添加通用参数!。

find2的声明应该是这样的:

public static void find2 (Box<String, Integer> e)

你应该检查两个盒子是否完全相同findequals无效,因为您未在equals中定义Box方法。所以:

for (Box<String, Integer> a : newlist){
    if (a.getName().equals(e.getName()) &&
        a.getMoney().equals(e.getMoney())){
        System.out.println("Found");
    }else {
        System.out.println("Not found");
    }
}

答案 2 :(得分:0)

在arraylist中搜索和查找内容的最简单方法是使用.equals方法结合for循环来迭代列表。

for(int i = 0; i < newList; ++i)
{
if(newlist.equals(Stringname))
    {
     //it matches so do something in here
    }
}

它在这里做的是逐一浏览列表,直到找到与您输入的内容相匹配的内容 - &gt;字符串名称