import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.HashMap;import java.util.Random;public class FindRepetition { private static final int index = 100000; private static int[] nums = new int[index];
static {
Random random = new Random(); for(int i = 0; i
nums[i] = random.nextInt(index);
}
}
public static void main(String... args) { long startTime1 = System.currentTimeMillis();
List result1 = findRepetitionTime(nums);
System.out.println(String.format("时间效率优先,耗时:%s", (System.currentTimeMillis() - startTime1))); long startTime2 = System.currentTimeMillis();
List result2 = findRepetitionSpace(nums);
System.out.println(String.format("时间效率优先,耗时:%s", (System.currentTimeMillis() - startTime2)));
}
//时间效率优先
private static List findRepetitionTime(int... nums) {
List result = new ArrayList();
Map countMap = new HashMap(8); for(int num: nums) { if(countMap.containsKey(num)) {
countMap.put(num, countMap.get(num));
} else {
countMap.put(num, 1);
}
} for(Map.Entry entry: countMap.entrySet()) { if(entry.getValue() == 1) {
result.add(entry.getKey());
}
} return result;
}
//空间效率优先
private static List findRepetitionSpace(int... nums) {
List result = new ArrayList(); for (int i = 0; i
int count = 0;//标记重复次数
for (int j = 0; j
count++;
} if(count==nums.length-1) {
result.add(nums[i]); break;
}
}
} return result;
}
}
print:时间效率优先,耗时:78空间效率优先,耗时:8102
上面的代码是两种方法的时间对比,时间和空间自己衡量,至于那种方法更好,各有各的优点。第一个消耗的空间多一点,第二个耗时长一点