62,634
社区成员




package csdn;
import java.util.ArrayList;
import java.util.Random;
public class LikeGroup {
// 动态特征库
private ArrayList<String> listFeature = new ArrayList<String>();
// 由多个动态子分组构成的动态总分组
private ArrayList<ArrayList<String>> listsGroup = new ArrayList<ArrayList<String>>();
// 文件名称数组
private String[] filenames;
// = {
// "1.jpg","2.jpg","3.jpg"
// ,"4.jpg","5.jpg","6.jpg"
// ,"7.jpg","8.jpg","9.jpg"
// ,"10.jpg","11.jpg","12.jpg"
// ,"13.jpg","14.jpg","15.jpg"
// };
/**
* 无参构造函数 进行相应的初始化工作
*/
public LikeGroup() {
// 初始化文件名称数组
int fileTotal = 15;
filenames = new String[fileTotal];
for (int i = 0; i < fileTotal; i++) {
filenames[i] = (i + 1) + ".jpg";
}
}
// [真实方法]得到相似度对比后的下标值
// 根据文件名和特征库进行逐一对比
// 暂未使用:修改好后可替换[模拟方法]
private int getCompareIndex2(String filename) {
int size = this.listFeature.size();
int index = 0;
while (index < size) {
// TODO: 此处填写你的真实业务对比代码
//伪代码:if filename 能匹配特征库
//则break;提前结束循环
index++; //否则索引继续自增
}
return index;
}
// [模拟方法]得到相似度对比后的下标值
// 使用中:[真实方法]业务完善后可弃用
private int getCompareIndex(String filename) {
Random random = new Random();
int size = this.listFeature.size();
// 模拟相似度匹配代码
int index = random.nextInt(size + 1);
return index;
}
// 更新特征库和分组信息
private void updateFeatureAndGroup(String filename) {
int sizeBeforeUpdate = this.listFeature.size();
int indexCompared = getCompareIndex(filename);
if (indexCompared < sizeBeforeUpdate) {
// 在特征库中能找到匹配,则维护已存在的子分组
for (ArrayList<String> subGroup : this.listsGroup) {
if (this.listFeature.get(indexCompared).equals(subGroup.get(0))) {
subGroup.add(filename);
break;
}
}
} else {
// 由于在特征库中找不到匹配,所以更新特征库
this.listFeature.add(filename);
// 添加新的子分组
ArrayList<String> newSubGroup = new ArrayList<String>();
newSubGroup.add(filename);
this.listsGroup.add(newSubGroup);
}
//辅助观察
System.out.print("当前文件名是:"+filename);
System.out.print(", 比较后的索引值=" + indexCompared);
System.out.print(", 特征库更新前size="+sizeBeforeUpdate +", 更新后size="+this.listFeature.size());
System.out.println(", 当前特征库列表=" + this.listFeature);
}
// 拿所有的文件进行比较并分组
public void execute() {
this.listFeature.clear();
this.listsGroup.clear();
int lenFiles = this.filenames.length;
for (int i = 0; i < lenFiles; i++) {
String filename = this.filenames[i];
this.updateFeatureAndGroup(filename);
}
}
private void printResult() {
// 因为模拟方法getCompareIndex函数使用了随机数处理,
// 所以每次打印的结果是不一样的,但业务逻辑是相同的
System.out.println("最终特征库列表=" + this.listFeature);
System.out.println("共有" + this.listsGroup.size() + "个子分组,它们分别是:");
for (ArrayList<String> list : this.listsGroup) {
System.out.println(list);
}
}
public static void main(String[] args) {
LikeGroup lg = new LikeGroup();
lg.execute();
lg.printResult();
}
}