package beast.util; import java.util.Arrays; import java.util.BitSet; import java.util.List; /** * some useful methods */ public class CollectionUtils { // not use set because hard to get element given index public static <E> List<E> intersection(List<E> list1, List<E> list2) { list1.retainAll(list2); return list1; } public static <E> List<E> intersection(E[] array1, E[] array2) { return intersection(Arrays.asList(array1), Arrays.asList(array2)); } public static <E> int indexof(E label, E[] m_sLabels) { for (int i = 0; i < m_sLabels.length ; i++) { if (m_sLabels[i].equals(label)) { return i; } } return -1; } /** * * @param array the array to be converted into list * @param fromIndex the index of the first element, inclusive, to be sorted * @param toIndex the index of the last element, exclusive, to be sorted * @return */ public static <E> List<E> toList(E[] array, int fromIndex, int toIndex) { List<E> list = Arrays.asList(array); return list.subList(fromIndex, toIndex); } /** * very inefficient, but Java wonderful bitset has no subset op * perhaps using bit iterator would be faster, I can't br bothered. * @param x * @param y * @return */ public static boolean isSubSet(BitSet x, BitSet y) { y = (BitSet) y.clone(); y.and(x); return y.equals(x); } }