感谢http://blog..net/zhangphil/article/details/47291145提供的思路和方法,作者提供了有序的数组去重的方法。参考这个思路,如果数组是无序的,那么该怎么去重呢。
public class ArrayCountUtils {
public static void main(String args[]) {
String[] data = { "1", "2", "1", "1", "3", "asdf", "3", "asdf", "3", "asdf", "3", "asdf", "3", "asdf", "sss", "5" };
ArrayCountUtils arrayCountUtils = new ArrayCountUtils();
List groups = arrayCountUtils.find(data);
for (Group group : groups) {
System.out.println(group.title + ":::::"+group.count);
}
}
/**
* 计算一个数组去重后的数量和每个去重值的数量
* @param data 数据源
* @return 返回的列表的长度代表去重后的数量 Group的字段title,count分别代表去重后的值和数量
*/
public List find(String [] data) {
//用来记录运算后的数据
Map resultMap = new LinkedHashMap<>();
/**
* 运算到的位置记录
*/
int countIndex = 0;
while (countIndex < data.length) {
String s = data[countIndex];
//如果这个值运算过 不再运算
if (resultMap.get(s) != null) {
countIndex++;
continue;
}
Group group = new Group();
group.title = s;
for (int i = countIndex; i < data.length; i++) {
if (data[i].equals(s)) {
group.count++;
}
}
resultMap.put(s, group);
countIndex++;
}
return new ArrayList(resultMap.values());
}
/**
* 用来记录去重后的信息
*/
private class Group {
public String title;
public int count;
}
}
输出结果:
1:::::3
2:::::1
3:::::5
asdf:::::5
sss:::::1
5:::::1
感谢原博客http://blog..net/zhangphil