java算法比较两个列表、同步表
该算法比较两个列表、同步表
我需要将本地表与从服务器加载的表同步。决定将这两个阶段与列表(本地列表和服务器)进行比较。最初,对列表进行了排序。它仍然是id比较中的一个里程碑
如果id在本地列表中,并且服务器不存在,则从本地数据库中删除条目(删除)。如果id等于本地服务器,则更新(update)。如果id是那里的服务器,并且没有本地服务器,则要添加(选择)。我刚才在阶段比较中遇到的问题,有些地方错了,有些地方是无法预见的
我扔掉了开始编写的比较算法,但无法完成图像和示例。请修改它。图像示例:http://c2n.me/3mMgiZg
List<Integer> server = new ArrayList<>();
List<Integer> local = new ArrayList<>();
DatabaseHandler db = new DatabaseHandler(context);
Iterator<Integer> serIter = server.iterator();
Iterator<Integer> locIter = local.iterator();
int item1 = serIter.next();
int item2 = locIter.next();
while(serIter.hasNext()) {
if (item1 <item2) {
db.addCourse(item1);
item1 = serIter.next();
} else {
if (locIter.hasNext()) {
while (item2 < item1) {
db.deleteCourse(item2);
item2 = locIter.next();
}
if (item1 == item2) {
db.updateCourse(item1);
item2 = locIter.next();
item1 = serIter.next();
}
} else {
while(item1<item2) {
db.addCourse(item1);
item1 = serIter.next();
}
if (item1 == item2) {
db.updateCourse(item1);
item1 = serIter.next();
} else {
db.deleteCourse(item2 );
continue other;
}
}
}
other:
while(item1>item2) {
db.addCourse(item1);
item1 = serIter.next();
}
}
# 1 楼答案
我说得对吗?如果是这样的话,有两种方法可以实现您的目标(只有第二种解决方案——asumes排序列表)
第一次尝试缓慢但短暂:
第二种解决方案的性能优于第一种:
# 2 楼答案
我不确定我是否明白你在说什么。如果您只想使本地列表=服务器列表,我将执行如下操作:
这将遍历服务器ArrayList中的所有项,并将它们更改为本地ArrayList中的值