【求教】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)) {
                   //做操作
                }
            }
        }
如果数据量很大的话有什么好方法?
------解决思路----------------------
	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、剩下只需要遍历一次,相邻比较即可。满足条件的数据,在反转输出。