Java集合工具類

jopen 9年前發布 | 4K 次閱讀 Java

泛型集合工具類,用于便捷快速的定義、操作集合。包含Set的交集、并集、差集、補集等操作。

import java.util.Set;
import java.util.Map;
import java.util.List;
import java.util.Queue;
import java.util.HashSet;
import java.util.HashMap;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.LinkedHashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**

  • 包含獲得各種集合對象的常用方法的泛型工具類。
  • <p>
  • 如果要獲得一個 {@code Map<String, String>} 的對象,可以通過下面的方式實現:
  • {@literal Map<String, String> map = GenericUtils.getMap();}。但是不能直接作為參數使用,例如有這樣一個方法:
  • {@literal setInfo(Map<String, String>)},不能直接這樣調用:<s>
  • <code>setInfo(GenericUtils.getMap())</code></s>
  • </p>
  • @author Fuchun
  • @version $Id: GenericUtils.java 4754 2011-03-26 19:50 fuchun $ */ public class GenericUtils {

    /**

    • 用該方法來代替 {@code new HashMap<K, V>()} 方式獲得新的 {@code java.util.Map} 的實例對象。
    • @param <K> {@code Map} 中的鍵對象。
    • @param <V> {@code Map} 中的值對象。
    • @return 返回 {@code java.util.Map<K, V>} 關于 {@code java.util.HashMap<K, V>} 實現的新實例。 */ public static <K, V> Map<K, V> getMap() { return new HashMap<K, V>(); }

      /**

    • 用該方法來代替 {@code new HashMap<K, V>(int)} 方式獲得新的 {@code java.util.Map} 的實例對象。
    • @param <K> {@code Map} 中的鍵對象。
    • @param <V> {@code Map} 中的值對象。
    • @param initialCapacity 初始容量。
    • @return 返回 {@code java.util.Map<K, V>} 關于 {@code java.util.HashMap<K, V>} 實現的新實例。 */ public static <K, V> Map<K, V> getMap(int initialCapacity) { return new HashMap<K, V>(initialCapacity); }

      /**

    • 用該方法來代替 {@code new ConcurrentHashMap<K, V>()} 方式獲得新的 {@code java.util.Map} 的實例對象。
    • @param <K> {@code Map} 中的鍵對象。
    • @param <V> {@code Map} 中的值對象。
    • @return 返回 {@code java.util.Map<K, V>} 關于
    • {@code java.util.concurrent.ConcurrentHashMap<K, V>} 實現的新實例。 */ public static <K, V> Map<K, V> getConcurrentMap() { return new ConcurrentHashMap<K, V>(); }

      /**

    • 用該方法來代替 {@code new ConcurrentHashMap<K, V>(int)} 方式獲得新的 {@code java.util.Map}
    • 的實例對象。
    • @param <K> {@code Map} 中的鍵對象。
    • @param <V> {@code Map} 中的值對象。
    • @param initialCapacity 初始容量。
    • @return 返回 {@code java.util.Map<K, V>} 關于
    • {@code java.util.concurrent.ConcurrentHashMap<K, V>} 實現的新實例。 */ public static <K, V> Map<K, V> getConcurrentMap(int initialCapacity) { return new ConcurrentHashMap<K, V>(initialCapacity); }

      /**

    • 用該方法來代替 {@code new LinkedHashMap<K, V>()} 方式獲得新的 {@code java.util.Map} 的實例對象。
    • @param <K> {@code Map} 中的鍵對象。
    • @param <V> {@code Map} 中的值對象。
    • @return 返回 {@code java.util.Map<K, V>} 關于 {@code java.util.LinkedHashMap<K, V>}
    • 實現的新實例。 */ public static <K, V> Map<K, V> getLinkedMap() { return new LinkedHashMap<K, V>(); }

      /**

    • 用該方法來代替 {@code new LinkedHashMap<K, V>(int)} 方式獲得新的 {@code java.util.Map} 的實例對象。
    • @param <K> {@code Map} 中的鍵對象。
    • @param <V> {@code Map} 中的值對象。
    • @param initialCapacity 初始容量。
    • @return 返回 {@code java.util.Map<K, V>} 關于 {@code java.util.LinkedHashMap<K, V>}
    • 實現的新實例。 */ public static <K, V> Map<K, V> getLinkedMap(int initialCapacity) { return new LinkedHashMap<K, V>(initialCapacity); }

      /**

    • 用該方法來代替 {@code new TreeMap<K, V>()} 方式獲得新的 {@code java.util.Map} 的實例對象。
    • @param <K> {@code Map} 中的鍵對象。
    • @param <V> {@code Map} 中的值對象。
    • @return 返回 {@code java.util.Map<K, V>} 關于 {@code java.util.TreeMap<K, V>} 實現的新實例。 */ public static <K, V> Map<K, V> getTreeMap() { return new TreeMap<K, V>(); }

      /**

    • 用該方法來代替 {@code new ConcurrentHashMap<K, V>()} 方式獲得新的
    • {@code java.util.concurrent.ConcurrentHashMap} 的實例對象。
    • @param <K> {@code Map} 中的鍵對象。
    • @param <V> {@code Map} 中的值對象。
    • @return 返回 {@code java.util.concurrent.ConcurrentMap<K, V>} 關于
    • {@code java.util.concurrent.ConcurrentHashMap<K, V>} 實現的新實例。 */ public static <K, V> ConcurrentMap<K, V> getConcurrentHashMap() { return new ConcurrentHashMap<K, V>(); }

      /**

    • 用該方法來代替 {@code new ConcurrentHashMap<K, V>(int)} 方式獲得新的
    • {@code java.util.concurrent.ConcurrentHashMap} 的實例對象。
    • @param <K> {@code Map} 中的鍵對象。
    • @param <V> {@code Map} 中的值對象。
    • @param initialCapacity 初始容量。
    • @return 返回 {@code java.util.concurrent.ConcurrentMap<K, V>} 關于
    • {@code java.util.concurrent.ConcurrentHashMap<K, V>} 實現的新實例。 */ public static <K, V> ConcurrentMap<K, V> getConcurrentHashMap(int initialCapacity) { return new ConcurrentHashMap<K, V>(initialCapacity); }

      /**

    • 用該方法來代替 {@code new ArrayList<T>()} 方式獲得新的 {@code java.util.List} 的實例對象。
    • @param <T> {@code List<T>} 中保存的對象。
    • @return 返回 {@code java.util.List<T>} 關于 {@code java.util.ArrayList<T>} 實現的新實例。 */ public static <T> List<T> getList() { return new ArrayList<T>(); }

      /**

    • 用該方法來代替 {@code new ArrayList<T>(int)} 方式獲得新的 {@code java.util.List} 的實例對象。
    • @param <T> {@code List<T>} 中保存的對象。
    • @param initialCapacity 列表的初始容量。
    • @return 返回 {@code java.util.List<T>} 關于 {@code java.util.ArrayList<T>} 實現的新實例。 */ public static <T> List<T> getList(int initialCapacity) { return new ArrayList<T>(initialCapacity); }

      /**

    • 用該方法來代替 {@code new ArrayList<T>()} 方式獲得新的 {@code java.util.List} 的實例對象。
    • @param <T> {@code List<T>} 中保存的對象。
    • @param c 其中的元素將存放在新的 {@code list} 中的 {@code collection}。
    • @return 返回 {@code java.util.List<T>} 關于 {@code java.util.ArrayList<T>} 實現的新實例。 */ public static <T> List<T> getList(Collection<? extends T> c) { if (ObjectUtils.isNotEmpty(c))

       return new ArrayList<T>(c);
      

      return new ArrayList<T>(); }

      /**

    • 用該方法來代替 {@code new LinkedList<T>()} 方式獲得新的 {@code java.util.List} 的實例對象。
    • @param <T> {@code List<T>} 中保存的對象。
    • @return 返回 {@code java.util.List<T>} 關于 {@code java.util.LinkedList<T>} 實現的新實例。 */ public static <T> List<T> getLinkedList() { return new LinkedList<T>(); }

      /**

    • 用該方法來代替 {@code new HashSet<T>()} 方式獲得新的 {@code java.util.Set} 的實例對象。
    • @param <T> {@code Set<T>} 中保存的對象。
    • @return 返回 {@code java.util.Set<T>} 關于 {@code java.util.HashSet<T>} 實現的新實例。 */ public static <T> Set<T> getHashSet() { return new HashSet<T>(); }

      /**

    • 用該方法來代替 {@code new HashSet<T>(int)} 方式獲得新的 {@code java.util.Set} 的實例對象。
    • @param <T> {@code Set<T>} 中保存的對象。
    • @param initialCapacity 列表的初始容量。
    • @return 返回 {@code java.util.Set<T>} 關于 {@code java.util.HashSet<T>} 實現的新實例。 */ public static <T> Set<T> getHashSet(int initialCapacity) { return new HashSet<T>(initialCapacity); }

      /**

    • 用該方法來代替 <code>new HashSet&lt;T&gt;(Collection&lt;? extends T&gt; c)</code> 方式獲得新的
    • {@code java.util.Set} 的實例對象。
    • @param <T> {@code Set} 中保存的對象。
    • @param c 其中的元素將存放在新的 {@code set} 中的 {@code collection}。
    • @return 返回 {@code java.util.Set<T>} 關于 {@code java.util.HashSet<T>} 實現的新實例。 */ public static <T> Set<T> getHashSet(Collection<? extends T> c) { if (ObjectUtils.isEmpty(c))

       return new HashSet<T>();
      

      return new HashSet<T>(c); }

      /**

    • 用該方法來代替 {@code new TreeSet<T>()} 方式獲得新的 {@code java.util.Set} 的實例對象。
    • @param <T> {@code Set<T>} 中保存的對象。
    • @return 返回 {@code java.util.Set<T>} 關于 {@code java.util.TreeSet<T>} 實現的新實例。 */ public static <T> Set<T> getTreeSet() { return new TreeSet<T>(); }

      /**

    • 用該方法來代替 <code>new TreeSet&lt;T&gt;(Collection&lt;? extends T&gt; c)</code> 方式獲得新的
    • {@code java.util.Set} 的實例對象。
    • @param <T> {@code Set} 中保存的對象。
    • @param c 其中的元素將存放在新的 {@code set} 中的 {@code collection}。
    • @return 返回 {@code java.util.Set<T>} 關于 {@code java.util.TreeSet<T>} 實現的新實例。 */ public static <T> Set<T> getTreeSet(Collection<? extends T> c) { if (ObjectUtils.isEmpty(c))

       return new TreeSet<T>();
      

      return new TreeSet<T>(c); }

      /**

    • 用該方法來代替 {@code new LinkedList<E>()} 方式獲得新的 {@code java.util.Queue} 的實例對象。
    • @param <E> {@code Queue<E>} 中保存的對象。
    • @return 返回 {@code java.util.Queue<E>} 關于 {@code java.util.LinkedList<E>} 實現的新實例。 */ public static <E> Queue<E> getQueue() { return new LinkedList<E>(); }

      /**

    • 合并兩個有相同元素類型的 {@code java.util.Set}。
    • <ul>
    • <li>{@code setA == null && setB == null} --&gt; 返回 {@link #getHashSet()}。</li>
    • <li>{@code setA != null && setB == null} --&gt; 返回 {@code setA}。</li>
    • <li>{@code setA == null && setB != null} --&gt; 返回 {@code setB}。</li>
    • <li>{@code setA != null && setB != null} --&gt; 返回 {@code setA} 和 {@code setB} 的并集。
    • </li>
    • </ul>
    • @param <T> {@code Set} 中保存的對象。
    • @param setA 第一個 {@code Set}。
    • @param setB 第二個 {@code Set}。
    • @return 返回 {@code setA} 和 {@code setB} 的并集。 */ public static <T> Set<T> unionHashSet(Set<T> setA, Set<T> setB) { boolean isEmptySetA = ObjectUtils.isEmpty(setA); boolean isEmptySetB = ObjectUtils.isEmpty(setB); if (isEmptySetA && isEmptySetB)

       return getHashSet();
      

      if (isEmptySetA && !isEmptySetB)

       return setB;
      

      if (!isEmptySetA && isEmptySetB)

       return setA;
      

      Set<T> result = getHashSet(setA); result.addAll(setB); return result; }

      /**

    • 取兩個有相同元素類型的 {@code java.util.Set} 的交集,即公共部份的新的 {@code java.util.Set}。
    • <ul>
    • <li>{@code setA == null && setB == null} --&gt; 返回 {@code null}。</li>
    • <li>{@code setA != null && setB == null} --&gt; 返回 {@code null}。</li>
    • <li>{@code setA == null && setB != null} --&gt; 返回 {@code null}。</li>
    • <li>{@code setA != null && setB != null} --&gt; 返回 {@code setA} 和 {@code setB} 的交集。
    • </li>
    • </ul>
    • @param <T> {@code Set} 中保存的對象。
    • @param setA 第一個 {@code Set}。
    • @param setB 第二個 {@code Set}。
    • @return 返回 {@code setA} 和 {@code setB} 的交集。 */ public static <T> Set<T> intersectHashSet(Set<T> setA, Set<T> setB) { if (ObjectUtils.isEmpty(setA) || ObjectUtils.isEmpty(setB))

       return null;
      

      Set<T> result = getHashSet(setA); result.retainAll(setB); return result; }

      /**

    • 移除 {@code setA} 中那些包含在 {@code setB} 中的元素。<br />
    • 此方法不會修改 {@code setA},只是復制一份作相應操作,返回的是全新的 {@code Set} 對象。
    • <ul>
    • <li>{@code setA == null} --&gt; 返回 {@code null}。</li>
    • <li>{@code setB == null} --&gt; 返回 {@code setA}。</li>
    • <li>{@code setA != null && setB != null} --&gt; 返回 {@code setA} 和 {@code setB}
    • 的不對稱差集。</li>
    • </ul>
    • @param <T> {@code Set} 中保存的對象。
    • @param setA 第一個 {@code Set}。
    • @param setB 第二個 {@code Set}。
    • @return 返回 {@code setA} 和 {@code setB} 的不對稱差集。 */ public static <T> Set<T> differenceHashSet(Set<T> setA, Set<T> setB) { if (ObjectUtils.isEmpty(setA))

       return null;
      

      if (ObjectUtils.isEmpty(setB))

       return setA;
      

      Set<T> result = getHashSet(setA); result.removeAll(setB); return result; }

      /**

    • 取兩個有相同元素類型的 {@code java.util.Set} 的補集。
    • @param <T> {@code Set} 中保存的對象。
    • @param setA 第一個 {@code Set}。
    • @param setB 第二個 {@code Set}。
    • @return 返回 {@code setA} 和 {@code setB} 的補集。 */ public static <T> Set<T> complementHashSet(Set<T> setA, Set<T> setB) { return differenceHashSet(unionHashSet(setA, setB), intersectHashSet(setA, setB)); } }</pre>
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!