Java 数组分组问题!!!高手请进!

List 数据为 [11234,121,112,17,12,11]
根据包含关系( indexof(x,0) )分组数据结果为:
[11234,112,11]
[121,12]
[17]
用java怎么实现这样的分组啊,谢谢高人了!!

刚回答了,感觉逻辑上不很严禁,兄弟,自己再优化下。list.remove(j);这里你再考虑一下删除条件。假如你的数据里面有1125。运行结果就不对了。

除去最后一个[11]需要说一下具体业务。

其他三组可以如下逻辑处理。

数据已倒序排列后,用前两位数字为基准分组

每一组各元素为 indexof 从 0 位置开始

简单的想法:你的list明显已经经过了排序,从第一个元素开始,不断在list中寻找当前元素之后的元素(之后的元素都小于它)是否满足包含条件,
(这里有一个你没有明示的地方,如果在list中出现1123,1124,112这三个数,112到底放在哪个分组中)
如果只是简单的划分,各分组之间不会出现重复元素的时候,那么我在找到112包含在1123中的时候,我就会将112放入分组中,并且将112从list中移除
如果不是简单的划分,112被放入两个分组中,那么112就不从list中移除。
遍历结束,分组也就划分好了。
我这里只谈想法,具体实现应该不复杂。

不好意思,数据有误。
应该是这样的:
List 数据为 [11234,121,112,17,12,11]
根据包含关系( indexof(x,0) )分组数据结果为:
[11234,112,11]
[121,12]
[17]

string类型??????????????

String 的 List

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class TestCsdn {
public static void main(String[] args) {
List list=new ArrayList();
list.add("11234");
list.add("121");
list.add("112");
list.add("17");
list.add("12");
list.add("11");

Collections.sort(list, new Comparator<String>(){

    @Override
    public int compare(String o1, String o2) {
        // TODO Auto-generated method stub
        int len1=o1.length();
        int len2=o2.length();
        int lim = Math.min(len1, len2);
        if(0==(o1.length()-o2.length())){
            for(int i=0;i<lim;i++){
                if(o1.charAt(i)!=o2.charAt(i)){
                    return o1.charAt(i)-o2.charAt(i);
                }
            }
        }
        return o1.length()-o2.length();
    }});
 System.out.println("先排序"+list.toString());
//分组
//Map<String,List> mp=new HashMap<String,List>();
     Set<List> st=new HashSet<List>();
     for(int i=0;i<list.size();i++){
         List<String> ls=new ArrayList<String>();
         String str=list.get(i);
         boolean flag=false;
         for(int j=0;j<list.size();j++){
             String str1;
             str1=list.get(j);
             if(str1.startsWith(str)||str1.equals(str)){
                 ls.add(str1);
                 list.remove(j);
                 j--;//指针也回退
                 flag=true;
             }
         }
         if(flag){i--;}//指针也回退
         st.add(ls);
         System.out.println(ls.toString());
     }

}

}
//=============结果=======可能内部效率不高,自己调整======
先排序[11, 12, 17, 112, 121, 11234]
[11, 112, 11234]
[12, 121]
[17]

hongyu83916 非常感觉,这么晚还能回复。谢谢问题解决!!!

https://my.oschina.net/Thinkeryjgfn/blog/3082989