【求教】Java判断集合中的元素是不是相互包含比较好的方法
【求教】Java判断集合中的元素是否相互包含比较好的方法?
假设List A的元素包括aa,baa,cac,ddd,ac;
我要取出aa,ac这样的元素。
目前的思路是对A做两次循环,
for (String str1 : list) {
for (String str2 : list) {
if (str2.endsWith(str1) && !str2.equals(str1)) {
//做操作
}
}
}
如果数据量很大的话有什么好方法?
------解决思路----------------------
------解决思路----------------------
如果要从集合里匹配出楼主的需求,那么应该从集合里取出两个字符串比较。而一次循环只能取出一个字符串进行匹配。所以集合中的元素是否相互包含应该需要N*N的运算级(个人理解如有问题还请各位大牛解惑)。
------解决思路----------------------
1、这种集合的操作,最直接的肯定是按照两两比较的方式,就会出现N^N的情形,针对这种情况。
2、使用正则表达式Pattern效率是很低的。如果在比较大的数据情况下,尽量减少使用。
3、数据结构和算法的优化,还是要考虑实际的场景。
如果单纯按照你题目上的需求,可以按照下面的思路来试试
A、遍历一次,将字符串全部反转。
B、将List自然排序。
C、剩下只需要遍历一次,相邻比较即可。满足条件的数据,在反转输出。
假设List A的元素包括aa,baa,cac,ddd,ac;
我要取出aa,ac这样的元素。
目前的思路是对A做两次循环,
for (String str1 : list) {
for (String str2 : list) {
if (str2.endsWith(str1) && !str2.equals(str1)) {
//做操作
}
}
}
如果数据量很大的话有什么好方法?
------解决思路----------------------
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="aa,baa,cac,ddd,ac";
String regex1="\\baa\\b
------解决思路----------------------
\\bac\\b";
Pattern p = Pattern.compile(regex1);
Matcher m = p.matcher(str);
while(m.find()){
System.out.println(m.group());
}
}
------解决思路----------------------
如果要从集合里匹配出楼主的需求,那么应该从集合里取出两个字符串比较。而一次循环只能取出一个字符串进行匹配。所以集合中的元素是否相互包含应该需要N*N的运算级(个人理解如有问题还请各位大牛解惑)。
------解决思路----------------------
1、这种集合的操作,最直接的肯定是按照两两比较的方式,就会出现N^N的情形,针对这种情况。
2、使用正则表达式Pattern效率是很低的。如果在比较大的数据情况下,尽量减少使用。
3、数据结构和算法的优化,还是要考虑实际的场景。
如果单纯按照你题目上的需求,可以按照下面的思路来试试
A、遍历一次,将字符串全部反转。
B、将List自然排序。
C、剩下只需要遍历一次,相邻比较即可。满足条件的数据,在反转输出。