Android Java,比较两个列表的最佳方法是什么?
我有两个默认浏览器和Chrome浏览器历史记录列表。 我想把这两个列表合并成一个列表。 我需要更新项目,如果我发现它重复是两个列表之间的共同点 我的BrowserRecord类是这样的: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
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