Android Java,比较两个列表的最佳方法是什么?

Android Java,比较两个列表的最佳方法是什么?,android,list,comparison,Android,List,Comparison,我有两个默认浏览器和Chrome浏览器历史记录列表。 我想把这两个列表合并成一个列表。 我需要更新项目,如果我发现它重复是两个列表之间的共同点 我的BrowserRecord类是这样的: public class BrowserRecord { private long id; private int bookmark; private long created; private long date; private String title; priv

我有两个默认浏览器和Chrome浏览器历史记录列表。 我想把这两个列表合并成一个列表。 我需要更新项目,如果我发现它重复是两个列表之间的共同点

我的BrowserRecord类是这样的:

public class BrowserRecord {

private long id;
    private int bookmark;
    private long created;
    private long date;
    private String title;
    private String url;
    private long visits;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        BrowserRecord record = (BrowserRecord) o;
        return url.equals(record.url);
    }

    @Override
    public int hashCode() {
        return url.hashCode();
    }

// other getter setter methods
...
}
最后,我有一个方法可以获取浏览器历史并进行合并:

public List<BrowserRecord> getHistory() {
        List<BrowserRecord> browserList = new ArrayList<BrowserRecord>();

        // get history of default and chrome browsers
        List<BrowserRecord> defaultList = getDefaultBrowserHistory();
        List<BrowserRecord> chromeList = getChromeBrowserHistory();

        Log.e(TAG, "=> size of Default browser:" + defaultList.size());
        Log.e(TAG, "=> size of Chrome browser:" + chromeList.size());

        // compare list A with B, update A item if equal item found in B and push it to tempList
        for(int i=0; i<chromeList.size(); i++) {
            BrowserRecord chromeBrowser = chromeList.get(i);

            for(int j=0; j<defaultList.size(); j++) {
                BrowserRecord defaultBrowser = defaultList.get(j);

                if(chromeBrowser.equals(defaultBrowser)) {
                    if(chromeBrowser.getBookmark() != defaultBrowser.getBookmark())
                        chromeBrowser.setBookmark(1);

                    chromeBrowser.setVisits(chromeBrowser.getVisits() + defaultBrowser.getVisits());
                }
            }

            browserList.add(chromeBrowser);
        }

        // compare list B with A, jump if equal item found in A, push to tempList if item not found
        for(int i=0; i<defaultList.size(); i++) {
            BrowserRecord defaultBrowser = defaultList.get(i);
            boolean found = false;

            for(int j=0; j<chromeList.size(); j++) {
                BrowserRecord chromeBrowser = chromeList.get(j);

                if(defaultBrowser.equals(chromeBrowser)) {
                    found = true;
                    break;
                }
            }

            if(!found)
                browserList.add(defaultBrowser);
        }

        Log.e(TAG, "=> size of final browser:" + browserList.size());
        return browserList;
    }
我已经测试过这个方法,效果很好。由于我3年后在移动设备上的历史记录在一个列表中不超过200条,在其他列表中不超过150条,所以我假设其他用户也在经历类似的事情。但我肯定这不是最好的方式

你推荐什么?
如有任何建议,将不胜感激。谢谢。

我不确定我是否理解正确,但似乎您要做的是,给定两个列表,创建一个最终列表,其中将包含两个列表中的所有元素,删除所有重复项

如果是这种情况,那么看看Java的类。如果您迭代两个列表中的所有元素并将它们插入到树集中,您基本上会得到您想要的结果。然后可以使用迭代器创建一个ArrayList,其中包含两个列表中的所有非重复项。作为使用树集的一个副作用,它们将被排序。如果您不关心顺序,也可以使用a,如果您希望保留插入顺序,也可以使用a