笨办法,就是每循环次就去和for循环的数组或list是否包含此元素。如果有。就int i++; 如果大于等于2说明此元素重复。记下索引再remove掉。
无非就是检查是否已经有数据的问题,用List做可能比较简单点。
public class SigleList{。
List<Integer> nums;。
public SingleList(){。
nums = new ArrayList<Integer>();。
}
public void add(Integer num){。
if(!checkNumExist){。
nums.add(num);。
}
}
public boolean checkNumExist(Integer){。
return nums.contains(Integer);。
}
这个SingleList就简单实现了去重增加,可以用它来读数据。
public class Test{。
public static void main(String[] args){。
SingleList nums = new SingleList();。
// 产生100个数据。
for(int i = 0; i++; i < 100){。
// 产生随机数。
Integer num = new Random().nextInt(100000);。
nums.add(num);。
}
foreach(Integer num : nums){。
System.out.println(num);。
}
}
你只需要考虑两点进行比较。
第一点:考虑用户ID,第二点:考虑时间。
当你读取一条log信息的时候,取出用户ID和时间,
我不清楚你是实时的在执行往DB里面插入还是过一点时间整理,
如果是实时插入,那么你取出这个log信息的时候,就需要去现在的数据库里面进行匹配。
带入用户ID,和时间,时间就以小时计算,如:2014-11-18 17。
如果在数据库查询出了这条数据,那么跳出,如果没有查询出结果,那么新增。
第二种情况,如果你是隔一段时间执行一次,那么你就只需要新建一个list集合,
然后用取出的log的集合循环和新的list数据进行匹配,如果遇到有的就跳出,如果在新的list集合里面没有的。
那么就添加到新的list集合里面。
写的有点乱,我这里不建议你用list,这样匹配的时候循环工作量非常大,建议使用hashmap,键值对处理起来方便,
以用户ID为key 方便处理。
public static void main(String[] args) {。
//可以换种思路,把数组放到set里面(set的值不会重复)就可以去重了。
Integer[] arr = {85,4,2,6,11,4,5,8,9};。
Set<Integer> set = new HashSet<Integer>();。
for(Integer i : arr)。
set.add(i);
for(Object j: set.toArray())。
System.out.print(j + " ");。
}
import java.util.HashSet;。
import java.util.Set;。
public class Test1 {。
private static final Set<String> str = new HashSet<>();。
public static void main(String args[]) {。
Test1.add("1");。
Test1.add("2");。
Test1.add("2");。
Test1.add("1");。
Test1.add("3");。
Test1.add("2");。
}
public static void add(String toAdd) {。
if(!str.add(toAdd)) System.out.println(toAdd);。
}
原文地址:http://www.qianchusai.com/java%E5%BE%AA%E7%8E%AF%E5%8E%BB%E9%87%8D.html