1. 程式人生 > 其它 >hive時間戳函式以及擷取字串函式

hive時間戳函式以及擷取字串函式

供自己鞏固集合知識時寫的筆記,不會對所有的內容都介紹

我們知道,Map用於儲存key-value的對映,對於充當key的物件,是不能重複的,並且,不但需要正確覆寫equals()方法,還要正確覆寫hashCode()方法。

如果我們只需要儲存不重複的key,並不需要儲存對映的value,那麼就可以使用Set

Set用於儲存不重複的元素集合,它主要提供以下幾個方法:

  • 將元素新增進Set<E>boolean add(E e)
  • 將元素從Set<E>刪除:boolean remove(Object e)
  • 判斷是否包含元素:boolean contains(Object e)

Set實際上相當於只儲存key、不儲存value的Map。我們經常用Set用於去除重複元素。

因為放入Set的元素和Map的key類似,都要正確實現equals()hashCode()方法,否則該元素無法正確地放入Set

最常用的Set實現類是HashSet,實際上,HashSet僅僅是對HashMap的一個簡單封裝,通過檢視HashSet的核心程式碼可見:

public class HashSet<E> implements Set<E> {
    // 持有一個HashMap:
    private HashMap<E, Object> map = new HashMap<>();

    // 放入HashMap的value:
    private static final Object PRESENT = new Object();

    public boolean add(E e) {
        return map.put(e, PRESENT) == null;
    }

    public boolean contains(Object o) {
        return map.containsKey(o);
    }

    public boolean remove(Object o) {
        return map.remove(o) == PRESENT;
    }
}

TreeSet

Set介面並不保證有序,而SortedSet介面則保證元素是有序的:

  • HashSet是無序的,因為它實現了Set介面,並沒有實現SortedSet介面;
  • TreeSet是有序的,因為它實現了SortedSet介面。

用一張圖表示:

       ┌───┐
       │Set│
       └───┘
         ▲
    ┌────┴─────┐
    │          │
┌───────┐ ┌─────────┐
│HashSet│ │SortedSet│
└───────┘ └─────────┘
               ▲
               │
          ┌─────────┐
          │ TreeSet │
          └─────────┘

使用TreeSet和使用TreeMap的要求一樣,新增的元素必須正確實現Comparable介面,如果沒有實現Comparable介面,那麼建立TreeSet時必須傳入一個Comparator物件。