public static <T> boolean listEquals(List<T> left, List<T> right) {
        if (left == null) {
            return right == null;
        } else {
            if (right == null) {
                return false;
            }
            if (left.size() != right.size()) {
                return false;
            }

            List<T> ltmp = new ArrayList<T>(left);
            List<T> rtmp = new ArrayList<T>(right);
            for (T t : ltmp) {
                rtmp.remove(t);
            }
            return rtmp.isEmpty();
        }
    }
@Test
    public void testListEquals() {
        List left = new ArrayList();
        List right = new ArrayList();
        Assert.assertTrue(CommonUtils.listEquals(null, null));
        Assert.assertFalse(CommonUtils.listEquals(left, null));
        Assert.assertFalse(CommonUtils.listEquals(null, right));
        Assert.assertTrue(CommonUtils.listEquals(left, right));

        left.add("111");
        left.add("111");
        Assert.assertFalse(CommonUtils.listEquals(left, right));

        right.add("222");
        right.add("111");
        Assert.assertFalse(CommonUtils.listEquals(left, right));

        left.remove("111");
        left.add("222");
        Assert.assertTrue(CommonUtils.listEquals(left, right));
    }