diff --git a/src/org/redkale/util/Utility.java b/src/org/redkale/util/Utility.java
index 7267a45d5..59bbacf02 100644
--- a/src/org/redkale/util/Utility.java
+++ b/src/org/redkale/util/Utility.java
@@ -920,6 +920,123 @@ public final class Utility {
return false;
}
+ /**
+ * 将指定的short元素是否数组中完全包含,重复元素的次数也要相同
+ * 例如:
+ * containsMatch(new short[]{1, 2, 2, 3, 3, 3}, 1, 2, 3, 3) = true
+ * containsMatch(new short[]{1, 2, 2, 3, 3, 3}, 1, 1, 2, 3, 3) = false
+ *
+ * @param array 原数组
+ * @param items short[]
+ *
+ * @return 是否完全包含
+ */
+ public static boolean containsMatch(final short[] array, final short... items) {
+ if (array == null && items == null) return true;
+ if (array == null && items.length == 0) return true;
+ if (array == null) return false;
+ if (items == null || items.length == 0) return true;
+ if (array.length == 0 && items.length == 0) return true;
+ if (array.length < items.length) return false;
+
+ short[] subs = array;
+ for (short item : items) {
+ if (!contains(subs, item)) return false;
+ short[] newsubs = new short[subs.length - 1];
+ int k = 0;
+ boolean done = false;
+ for (short v : subs) {
+ if (done) {
+ newsubs[k++] = v;
+ } else if (v == item) {
+ done = true;
+ } else {
+ newsubs[k++] = v;
+ }
+ }
+ subs = newsubs;
+ }
+ return true;
+ }
+
+ /**
+ * 将指定的int元素是否数组中完全包含,重复元素的次数也要相同
+ * 例如:
+ * containsMatch(new int[]{1, 2, 2, 3, 3, 3}, 1, 2, 3, 3) = true
+ * containsMatch(new int[]{1, 2, 2, 3, 3, 3}, 1, 1, 2, 3, 3) = false
+ *
+ * @param array 原数组
+ * @param items int[]
+ *
+ * @return 是否完全包含
+ */
+ public static boolean containsMatch(final int[] array, final int... items) {
+ if (array == null && items == null) return true;
+ if (array == null && items.length == 0) return true;
+ if (array == null) return false;
+ if (items == null || items.length == 0) return true;
+ if (array.length == 0 && items.length == 0) return true;
+ if (array.length < items.length) return false;
+
+ int[] subs = array;
+ for (int item : items) {
+ if (!contains(subs, item)) return false;
+ int[] newsubs = new int[subs.length - 1];
+ int k = 0;
+ boolean done = false;
+ for (int v : subs) {
+ if (done) {
+ newsubs[k++] = v;
+ } else if (v == item) {
+ done = true;
+ } else {
+ newsubs[k++] = v;
+ }
+ }
+ subs = newsubs;
+ }
+ return true;
+ }
+
+ /**
+ * 将指定的long元素是否数组中完全包含,重复元素的次数也要相同
+ * 例如:
+ * containsMatch(new long[]{1, 2, 2, 3, 3, 3}, 1, 2, 3, 3) = true
+ * containsMatch(new long[]{1, 2, 2, 3, 3, 3}, 1, 1, 2, 3, 3) = false
+ *
+ * @param array 原数组
+ * @param items long[]
+ *
+ * @return 是否完全包含
+ */
+ public static boolean containsMatch(final long[] array, final long... items) {
+ if (array == null && items == null) return true;
+ if (array == null && items.length == 0) return true;
+ if (array == null) return false;
+ if (items == null || items.length == 0) return true;
+ if (array.length == 0 && items.length == 0) return true;
+ if (array.length < items.length) return false;
+
+ long[] subs = array;
+ for (long item : items) {
+ if (!contains(subs, item)) return false;
+ long[] newsubs = new long[subs.length - 1];
+ int k = 0;
+ boolean done = false;
+ for (long v : subs) {
+ if (done) {
+ newsubs[k++] = v;
+ } else if (v == item) {
+ done = true;
+ } else {
+ newsubs[k++] = v;
+ }
+ }
+ subs = newsubs;
+ }
+ return true;
+ }
+
/**
* 删除掉字符串数组中包含指定的字符串
*