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 非常感觉,这么晚还能回复。谢谢问题解决!!!