1 import java.util.ArrayList;
2
3 public class Test {
4
5 // 原始数据data。假设data数组中的数据元素已经按照某种顺序排好。
6 // 但是,该数组中的数据元素重复出现。
7 // 我们的目的是查找、解析data数组中重复出现的某元素。
8 // 比如,在这个data数组中,元素'C'在数组位置2,3重复出现两次。
9 // 注意!有些元素没有重复出现,比如元素'B'。
10 private String[] data = { "A", "A", "B", "C", "C", "D", "D", "D" };
11
12 // 存储分类好的数据元素。
13 private ArrayList<Group> groups = new ArrayList<Group>();
14
15 // 核心的算法实现。
16 public void find() {
17
18 // 游标index
19 int index = 0, j = 0;
20
21 while (index < data.length) {
22 Group group = new Group();
23 group.title = data[index];
24
25 String t = group.title;
26
27 ArrayList<String> children = new ArrayList<String>();
28
29 for (j = index; j < data.length; j++) {
30
31 String child = data[j];
32 if (t.equals(child)) {
33 // 同时记录该重复出现的元素在原数组中的下标j,便于查验、评估结果。
34 children.add(child + "@" + j);
35 } else {
36 break;
37 }
38 }
39
40 // 往后推进游标index
41 index = j;
42
43 group.children = children;
44 groups.add(group);
45 }
46 }
47
48 // 输出结果。
49 private void print() {
50 for (int i = 0; i < groups.size(); i++) {
51 Group g = groups.get(i);
52 System.out.println(g);
53 }
54 }
55
56 // 自己构造一个类,作为一组数据的容器。
57 // 该类用一个title表明这一group数据是归属于那个重复元素的组。
58 // 该title下重复的元素装入到ArrayList<String> children中,供遍历查询。
59 private class Group {
60 public String title;
61 public ArrayList<String> children;
62
63 // 结果。
64 @Override
65 public String toString() {
66 String str = "组" + title + ": ";
67 for (int i = 0; i < children.size(); i++) {
68 str += children.get(i) + " ";
69 }
70
71 return str;
72 }
73 }
74
75 public static void main(String args[]) {
76 Test t = new Test();
77 t.find();
78 t.print();
79 }
80 }