大虾们好:
小弟最近遇到一个算法上的困扰如题:List<ArrayList>有这样一个双层数组,
每一个子Arraylist中存放着一些数据
如:List<String> array1 = new ArrayList<String>();
array1.add("11");
array1.add("22");
array1.add("33");
array1.add("44");
List<String> array2 = new ArrayList<String>();
array2.add("cc");
array2.add("dd");
array2.add("ee");
List<String> array3 = new ArrayList<String>();
array3.add("11");
array3.add("22");
array3.add("33");
array3.add("44"); List<List> arrAll = new ArrayList<List>();
arrAll.add(array1);
arrAll.add(array2);
arrAll.add(array3);现在看到有array1,与array3,他们数据相同,现在问题是:如何获取这些相同数据所在总的List中的下标index,因为默认情况下是获得最先出现的index,和我预期的结果不一样。(indexOf,但这个只能获得最先出现这个值得下标),所以请求帮助。
小弟最近遇到一个算法上的困扰如题:List<ArrayList>有这样一个双层数组,
每一个子Arraylist中存放着一些数据
如:List<String> array1 = new ArrayList<String>();
array1.add("11");
array1.add("22");
array1.add("33");
array1.add("44");
List<String> array2 = new ArrayList<String>();
array2.add("cc");
array2.add("dd");
array2.add("ee");
List<String> array3 = new ArrayList<String>();
array3.add("11");
array3.add("22");
array3.add("33");
array3.add("44"); List<List> arrAll = new ArrayList<List>();
arrAll.add(array1);
arrAll.add(array2);
arrAll.add(array3);现在看到有array1,与array3,他们数据相同,现在问题是:如何获取这些相同数据所在总的List中的下标index,因为默认情况下是获得最先出现的index,和我预期的结果不一样。(indexOf,但这个只能获得最先出现这个值得下标),所以请求帮助。
arrAll.add(array2);
arrAll.add(array3.removeAll(array1));
这样呢?
如果有多个的,可以indexOf以后,再取一个subList从indexOf获得的位置到最后,然后再从subList中indexOf,依次处理,直到查找结束。
http://topic.csdn.net/u/20110619/11/31798a34-7830-4889-9c59-29ad849d0a33.html
效率比建sublist再取indexOf还要高
List<String> array1 = new ArrayList<String>();
array1.add("11");
array1.add("12");
array1.add("13");
List<String> array2 = new ArrayList<String>();
array2.add("cc");
array2.add("dd");
array2.add("ee");
List<String> array3 = new ArrayList<String>();
array3.add("11");
array3.add("12");
List<String> array4 = new ArrayList<String>();
array4.add("cc");
array4.add("dd");
array4.add("ee");
array4.add("ff");
List<List> arrAll = new ArrayList<List>();
arrAll.add(array1);
arrAll.add(array2);
arrAll.add(array3);
arrAll.add(array4);
StringBuilder builder = new StringBuilder();
List<String> finalList = new ArrayList<String>();
int flag = 0;
arrayCombine(arrAll, builder, finalList);
System.out.println(finalList);
System.out.println(finalList.size()); } public static void arrayCombine(List<List> arrAll, StringBuilder builder,
List<String> finalList) {
List<String> presentList = (List) arrAll.get(0);
for (int i = 0; i < presentList.size(); i++) {
int index = arrAll.indexOf(presentList);
if(index>0)index=-1;
if (index == arrAll.size() - 1) {
builder.append(presentList.get(i));
finalList.add(builder.toString());
String temp = builder.toString();
temp = temp.substring(0, (temp.length() - presentList.get(i)
.length()));
builder = new StringBuilder(temp); } else {
if(i!=0){
String temp = builder.toString();
int length = 0;
for(int j=index+1;j<arrAll.size();j++){
List tempList =(List)arrAll.get(j);
length += tempList.get(0).toString().length();
}
temp = temp.substring(0, (temp.length() - presentList.get(i-1)
.length()-length)); builder = new StringBuilder(temp);
}
arrAll = arrAll.subList(index+1,arrAll.size());
builder.append(presentList.get(i));
arrayCombine(arrAll, builder, finalList);
}
}
}
List<String> array1 = new ArrayList<String>();
array1.add("aa");
array1.add("bb");
array1.add("cc");
array1.add("dd");
List<String> array2 = new ArrayList<String>();
array2.add("zq");
List<String> array3 = new ArrayList<String>();
array3.add("dd");
array3.add("ee");
array3.add("ff");
array3.add("gg");
//array3.add("13");
List<String> array4 = new ArrayList<String>();
array4.add("11");
array4.add("12");
array4.add("13");
array4.add("14");
List<String> array5 = new ArrayList<String>();
array5.add("44");
array5.add("55");
array5.add("66");
array5.add("77");
//array5.add("ff");
List<List> arrAll = new ArrayList<List>();
arrAll.add(array1);
//arrAll.add(array2);
arrAll.add(array4);
arrAll.add(array3);
arrAll.add(array5);
System.out.println(arrAll.indexOf(array2));
StringBuilder builder = new StringBuilder();
List<String> finalList = new ArrayList<String>();
int flag = 0;
arrayCombine(arrAll, builder, finalList,0);
System.out.println(finalList);
System.out.println(finalList.size()); } public static void arrayCombine(List<List> arrAll, StringBuilder builder,
List<String> finalList,int index) {
List<String> presentList = (List) arrAll.get(0);
for (int i = 0; i < presentList.size(); i++) {
List<List> arrTempAll = arrAll.subList(index+1,arrAll.size());
index = arrTempAll.indexOf(presentList);
if(index >=0)index= -1;
if (arrAll.size() - 1 == 0) {
builder.append(presentList.get(i));
finalList.add(builder.toString());
String temp = builder.toString();
temp = temp.substring(0, (temp.length() - presentList.get(i)
.length()));
builder = new StringBuilder(temp); } else {
if(i!=0){
String temp = builder.toString();
int length = 0;
for(int j=index+1;j<arrTempAll.size();j++){
List tempList =(List)arrAll.get(j);
length += tempList.get(0).toString().length();
}
temp = temp.substring(0, (temp.length() - presentList.get(i-1)
.length()-length)); builder = new StringBuilder(temp);
}
if(index<0)index=0;
builder.append(presentList.get(i));
arrayCombine(arrTempAll, builder, finalList,0);
}
if(index<0)index=0;
}
}
String strs = "银行假银行";
String str2= "银行";
strs = strs.replaceAll("\\(", "").replaceAll("\\)", "");
System.out.println(strs.toUpperCase().equals(str2.toUpperCase()));
char[] chars = strs.toCharArray();
outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
outputFormat.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);
// for(char cha : chars){
// String [] sty = PinyinHelper.toGwoyeuRomatzyhStringArray(cha);
// if(sty!= null){
// for(String str:sty){
// System.out.print(str+" ");
// }
// }
// }银行,自行车yingh、yinhang xingheng gh
System.out.println("\n----------------------------");
Set pingyinSet;
List<String> arr = new ArrayList<String>();
List<String> arrSet = null;
List<List> arrAll = new ArrayList<List>();
for (char cha : chars) {
String[] sty = PinyinHelper.toHanyuPinyinStringArray(cha,outputFormat);
pingyinSet = new HashSet();
if(sty == null){
String str1 = String.valueOf(cha);
arr.add(str1);
}
if(sty != null){
for(String str:sty){
str =str.replaceAll("[0-9]", "");
str = str.replaceAll("u:", "v");
pingyinSet.add(str);
}
Iterator it= pingyinSet.iterator();
arrSet =new ArrayList<String>();
while(it.hasNext()){
String multiFactor = (String)it.next();
System.out.println(multiFactor);
arrSet.add(multiFactor);
}
arrAll.add(arrSet);
}
}