2つの文字列の文字が完全に同じ適用を迅速に比較


私にはこのようなビジネスニーズがあります.
============================================================
文字列の配列が入力され、すべての要素の組合せの集合が返されます.
ep:
input :
String[]strs={「需要」、「カテゴリ」、「その他」};
output :
[需要、カテゴリ、その他、需要|カテゴリ、需要|その他、カテゴリ|その他、需要|カテゴリ|その他]
===========================================================
 次は私のソリューションです.
===========================================================
import java.util.ArrayList;
import java.util.Stack;

/**
 *     :   
 * 
 * @author dell
 */
public class Test
{
	public static void main(String[] args)
	{

		String[] strs = { "  ", "  ", "  " };
		for (int i = 1, size = strs.length; i <= size; i++)
		{
			ArrayUtil.getSequence(strs, 0, i);
		}
		if (ArrayUtil.list != null)
		{
			for (String string : ArrayUtil.list)
			{
				System.out.println(string);
			}
		}
	}
}

/**
 *     :         .<br>
 * 
 * @author dell
 */
class ArrayUtil
{
	/**
	 *  :          
	 */
	private static Stack<String> STR_STACK = new Stack<String>();
	/**
	 *   :                
	 */
	public static MyArrayList<String> list = new MyArrayList<String>();

	/**
	 *     :    ,           
	 * 
	 * @param strs
	 * @param begin
	 * @param num
	 */
	public static void getSequence(String[] strs, int begin, int num)
	{

		if (num == 0)
		{
			int i = 0;
			String string = "";
			for (String s : STR_STACK)
			{
				if (i == 0)
				{
					string += s;
				}
				else
				{
					string += "|" + s;
				}
				i++;
			}
			if (!list.contains(string))
			{
				list.add(string);
			}
		}
		else
		{
			for (int i = begin, size = strs.length; i < size; i++)
			{
				STR_STACK.push(strs[i]);
				swapArray(strs, begin, i);
				getSequence(strs, begin + 1, num - 1);
				swapArray(strs, begin, i);
				STR_STACK.pop();
			}
		}
	}

	/**
	 *     :        .<br>
	 * 
	 * @param strs
	 * @param begin
	 * @param index
	 */
	private static void swapArray(String[] strs, int begin, int index)
	{

		if (begin == index)
		{
			return;
		}
		else
		{
			String s = strs[begin];
			strs[begin] = strs[index];
			strs[index] = s;
		}
	}
}

/**
 *     :      ,  ArrayList.<br>
 * 
 * @author dell
 * @param <E>
 */
class MyArrayList<E> extends ArrayList<E>
{
	private static final long serialVersionUID = -1807603974870350857L;

	@Override
	public int indexOf(Object o)
	{

		Object[] elementData = toArray();
		int size = size();
		if (o == null)
		{
			for (int i = 0; i < size; i++)
				if (elementData[i] == null)
					return i;
		}
		else
		{
			for (int i = 0; i < size; i++)
			{
				if (o.equals(elementData[i]))
				{
					return i;
				}
				else if (o instanceof String && elementData[i] instanceof String)
				{
					// //                      
					if (validateStrings((String) o, (String) elementData[i]))
					{
						return i;
					}
				}
			}
		}
		return -1;
	}

	/**
	 *   :                。<br>
	 *   :                 0.                     ,<br>
	 *                  ,             。<br>
	 * 
	 * @param str1
	 * @param str2
	 * @return
	 */
	private boolean validateStrings(String str1, String str2)
	{

		// //            
		if (str1.length() != str2.length())
		{
			return false;
		}
		char[] str1Chars = str1.toCharArray();
		char[] str2Chars = str2.toCharArray();
		int i = 1;
		for (char c : str1Chars)
		{
			i ^= c;
		}
		for (char c : str2Chars)
		{
			i ^= c;
		}
		if (i == 1)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
}