要求与效果
-------------------------原数据-----------------------
{张三,李四a,张三B,王五b,张三,李四a,李四a,王五}
------------------------------筛选后---------------------------
单一数据集合:
{张三B,王五b,王五}
重复数据集合:
{张三,张三,李四a,李四a,李四a}
代码
/**
* 无序
*
* @param strings 集合数据
*/
private void sortTest2(ArrayList<String> strings) {
//单一数据集合
ArrayList<String> singleList = new ArrayList();
//重复数据集合
ArrayList<String> moreList = new ArrayList();
//头游标
int start = 0;
//尾游标
int end = strings.size() - 1;
//用来标记最后一条重复数据下标
int last = 0;
while (start <= strings.size() - 1) {
//有重复 进行位置交换
if (strings.get(start).equals(strings.get(end)) && start < end) {
String tmp = strings.get(start + 1);
strings.set(start + 1, strings.get(end));
strings.set(end, tmp);
moreList.add(strings.get(start));
start++;
end = strings.size() - 1;
//更新最后重复数据下标位置
last = start;
} else if (start == end) {
if (start != last || last == 0) {
singleList.add(strings.get(start));
} else {
moreList.add(strings.get(start));
}
//下标移动
start++;
//从后 重新开始
end = strings.size() - 1;
} else {
//遍历
end--;
}
}
System.out.println("------------------------------筛选后---------------------------");
System.out.println("单一数据集合:");
show(singleList);
System.out.println("重复数据集合:");
show(moreList);
}
输出结果
------------------------------筛选后---------------------------
单一数据集合:
{张三B,王五b,王五}
重复数据集合:
{张三,张三,李四a,李四a,李四a}
打印方法
private void show(List list) {
//打印输出
System.out.print("{");
for (int i = 0; i < list.size(); i++) {
if (i != list.size() - 1) {
System.out.print(list.get(i) + ",");
} else {
System.out.print(list.get(i));
}
}
System.out.println("}");
}