---
# System prepended metadata

title: 2/4 Enum
tags: [Java]

---

---
tags: Java 
---
# 2/4 Enum

## Enum
* 是一種特殊類別(class)，擁有類別的某些特性，例如:可以實作(implement)介面(interface)。
* 也可以定義抽象方法並覆寫(override)。 
* 從JDK5之後新增了enum語法，對於列舉常數的應用方式，參數接受的是int型態，這表你可以傳入任何的int值。

```
 enum Category {
        資訊(1), 食譜(2), 旅遊(3);
        int code;
        Category(int code){
            this.code = code;
        }
    }
```
* 宣告常數時，通常使用大寫字母，並可以底線來區隔每個單字以利識別，例如像TURN_LEFT這樣的名稱。
* 可以加建構子，建構子是隱含性的private，private修飾詞可寫可不寫，但不能變更為public。
* 在JAVA 1.7擴充switch的功能後，便可以使用列舉做為引數，使得程式碼更為簡潔、易讀，更容易理解程式碼。

> [深度挖掘Java列舉(enum)](https://tpu.thinkpower.com.tw/tpu/articleDetails/1432)

Q: 為何Comparator後面要加<型別>
Q: 為何import java.util.* ，可以導入，但java.util.regex.* 會不行
Ans: 因為兩個是不同package，要個別導入。
Q: 樂透改用TreeSet去裝在選球

![](https://i.imgur.com/bqipG1D.jpg)
![](https://i.imgur.com/JNtZ4cN.jpg)
Q: Collection ArrayLsit去跟書籍contains是否能true
Ans: contains會去查看此集合是否包含指定元素，若包含至少一個包含指定元素(o==null ? e==null : o.equals(e))，會回傳true。
Q: Collection HashSet除了比出跟書籍contains是否能true，並印出來不能重複
Ans: HashSet 具體實現時，會用一個table去存放hashCode ，hashCode沒有重複會直接存入，若重複會再用equals方法去比較元素是否相同，在Set中相同資料就不會塞到集合內了。