写一个查找算法找出数组中相同的元素
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 }