簡體   English   中英

在arrayList Java中搜索對象

[英]Search for an object in arrayList Java

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()可以完美工作,但我認為這是錯誤的,也是我這么想的原因,因為我將字符串和整數作為參數傳遞但應該是box對象,還是我錯了?

在我的第二個方法find2()中,我試圖將Box對象作為參數傳遞,當我嘗試搜索它時,我得到了一個錯誤的結果=(

我是noobie,我試圖理解和學習。

您應該在Box類上重寫Object.equals()。 也嘗試正確處理null。 因為2個具有空名稱和/或空貨幣的Box實際上是相等的。

(您不需要為此重寫Object.hashCode(),但是這樣做是一個好習慣,以防萬一它在哈希映射或哈希集等中使用)。

停止使用原始類型!

Box是通用的,因此,如果您不針對較早的Java版本,請務必添加通用參數 !。

find2的聲明應如下所示:

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

並且您應該檢查兩個框是否完全符合find equals將不起作用,因為您沒有在Box定義equals方法。 所以:

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");
    }
}

搜索和查找數組列表中某些內容的最簡單方法是將.equals方法與for循環結合使用以遍歷列表。

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

它在這里所做的是在列表中一一遍地移動,直到找到與您輸入的內容相匹配的內容-> stringName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM