大虾们好:
    小弟最近遇到一个算法上的困扰如题: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,但这个只能获得最先出现这个值得下标),所以请求帮助。

解决方案 »

  1.   

    arrAll.add(array1);
    arrAll.add(array2);
    arrAll.add(array3.removeAll(array1));
    这样呢?
      

  2.   

    这样,有违背我的操作。像楼上所言,array3不是被清空了吗?并且array1,array2,array3,可能还会有array5,array6.事先不知道那两个会出现一样,也可能这些个子array都完全一样,所以难在这里,获得正确对应的下标。而且保证每一项存在。不能被remove掉。
      

  3.   

    indexOf,但这个只能获得最先出现这个值得下标都知道用indexOf,就不会再往深一点考虑首先,如果只有两个相同的,可以使用lastIndexOf获取后一个
    如果有多个的,可以indexOf以后,再取一个subList从indexOf获得的位置到最后,然后再从subList中indexOf,依次处理,直到查找结束。
      

  4.   

    楼主这个要求有什么意义吗?list里放很多相同的值,然后分别取它们的下标。建议采取其它的处理方式。也许实际中不一定非得把这些子list都放在一个大list中。
      

  5.   

    楼上的方法还不错,另外方法调用上还有个错误,应该是arrAll.addAll(array1);
      

  6.   

    sublist是个好方法,之前我有考虑,现在在试试。等试出来后,我贴一下代码
      

  7.   

    在你另一帖子里给了一些sample的代码和思路,可以参考根据需求修改
    http://topic.csdn.net/u/20110619/11/31798a34-7830-4889-9c59-29ad849d0a33.html
      

  8.   

    建议你自己遍历整个数组,两行代码就够了
    效率比建sublist再取indexOf还要高
      

  9.   

    public static void main(String[] args) {
    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);
    }
    }
    }
      

  10.   

    public static void main(String[] args) {
    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;
    }
    }
      

  11.   

    HanyuPinyinOutputFormat outputFormat=new HanyuPinyinOutputFormat();
    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);
    }
    }