一个数组
比如{苹果,茄子,白菜,鸭梨,茄子,橙子,鸭梨,白菜,鸭梨,茄子,白菜,苹果}
就是挑出 白菜 3 个
鸭梨 3 个
茄子 2 个
苹果 2 个
鸭梨 1 个现在要统计,其中有哪些不同元素,不同元素的个数各是多少这里想请教,如何做效率更高?
是不是每次都要遍历一遍数组?个人觉得,hashmap应该不好,因为所谓的id不适合作为逐渐增长的个数统计。这种非连续性的数组元素类型,如果先做一次排序,然后逐个遍历一次,得到结果估计会快,但是之前的排序会不会代价更高?请各位指点,谢谢了
比如{苹果,茄子,白菜,鸭梨,茄子,橙子,鸭梨,白菜,鸭梨,茄子,白菜,苹果}
就是挑出 白菜 3 个
鸭梨 3 个
茄子 2 个
苹果 2 个
鸭梨 1 个现在要统计,其中有哪些不同元素,不同元素的个数各是多少这里想请教,如何做效率更高?
是不是每次都要遍历一遍数组?个人觉得,hashmap应该不好,因为所谓的id不适合作为逐渐增长的个数统计。这种非连续性的数组元素类型,如果先做一次排序,然后逐个遍历一次,得到结果估计会快,但是之前的排序会不会代价更高?请各位指点,谢谢了
public class TestCount
{ /**
* @param args
*/
public static void main(String[] args)
{
String str = "12455547464515475354635"; int[] x = new int[10];
char[] ca = str.toCharArray();
for (int i = 0; i < ca.length; i++)
{
x[ca[i] - '0']++;
} for (int i = 0; i < x.length; i++)
{
System.out.println("字符" + (char) ('0' + i) + "出现了" + x[i] + "次");
} }ps:hashmap读取并排序的代码如下:
public static void main(String[] args) {
int[] data = { 3, 3, 5, 1, 3, 5, 3, 5, 5, 8 };
Map<Integer, Integer> m = new HashMap<Integer, Integer>();
for (int i = 0; i < data.length; i++) {
if (m.get(data[i]) == null) {
m.put(data[i], 1);
} else {
m.put(data[i], m.get(data[i]) + 1);
}
}
System.out.println("Map里的元素: " + m); int t = 0;
Set<Map.Entry<Integer, Integer>> set = m.entrySet();
for (Entry<Integer, Integer> entry : set) {
if (entry.getValue() > t) {
t = entry.getValue();
}
} System.out.println("次数最多的有:");
for (Entry<Integer, Integer> entry : set) {
if (entry.getValue() == t) {
System.out.println(entry.getKey());
}
}
}
}
别瞧不起HashMap,现在的PC机,一百万个数据都没问题。
优化算法是要看数据规模的。数据量不大的话,优化了也没有太大意义,简单的方式最好。
排序
Collections.sort(list)
排序的时间复杂度为O(n log n)
你说哪个快?