기본 및 Chrome 브라우저 기록의 두 가지 목록이 있습니다. 이 두 목록을 하나의 목록으로 병합하고 싶습니다. 복제본을 찾으면 항목을 업데이트해야합니다 (두 목록간에 공통적입니다).자바, 두 목록을 비교하는 가장 좋은 방법은 무엇입니까?
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
...
}
그리고 마지막으로, 나는 브라우저의 역사를 얻을 수 및 병합 않는 방법이 있습니다 :
그래서, 내 "BrowserRecord"클래스는 다음과 같이이다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 개를 넘지 않았으므로 다른 사용자가 비슷한 일이 발생했다고 가정합니다. 그러나 나는 최적의 방법이 아니라고 확신합니다.
무엇이 좋습니다? 제안 사항을 보내 주시면 감사하겠습니다. 감사.