---
# System prepended metadata

title: 2/3 Collection Framework、 Comparable與Comparator
tags: [Java]

---

---
tags: Java 
---
# 2/3 Collection Framework、 Comparable與Comparator

## Collection Framework

![](https://i.imgur.com/enmClY5.jpg)

==補充: 實線有繼承關係，虛線則是要實作關係==
### Collection
* java.util內。
* 定義基本操作。
* 有Iterable，能用Enhance "For" 去讀取元素資料。
* 
為了不讓iterator生命周期過長使用for迴圈去跑。
```
datas是資料
//        for( Iterator it = datas.iterator();it.hasNext();){
//            Object data = it.next();
//            System.out.println(data);
//        }
//下列是比較好的方式for
        for( Object data: datas){
            System.out.println(data);
        }
```
### List
* 有ArrayList、Vector、LinkedList。
* 順序性: 有照原本順序，怎麼存放怎麼取出。
* 允許重複的資料
* LinkedList 可當作Queue使用(先進先出(FIFO)) 。

### Set
* 有HashSet、LinkedHashSet、TreeSet。
* 不允許重複資料(篩選資料)。
* TreeSet有排序的功能又能有不重複的資料。

==補充: TreeXXX就具有排序的能力==


### Comparable (資料) 
* java.lang
* 是在集合內部定義的方法實現的排序的介面
* compareTo(另一個)
* 比出來值大於零，兩個順序互換。
* 彈性小，只能在同個類裡面去比較。

### Comparator
* java.util
* 是在集合外部實現的排序的介面
* compare(a, b)，排序，需要比較兩個物件誰在前誰在後。
* 彈性大。
* 是一個介面，是比較器，功能上用來排序比較多，但不是只有排序的功能還有其他的。
* 另一個可能會用到的是分組。

Q: 用一個類去實作Comparator覆寫compare()
Q: 大樂透隨機產生六個號碼並去排序出來

