java容器之List+Comparable與Comparator比較
List分為ArrayList和LinkedList兩種。
ArrayList用於隨機訪問,他在中間插入或刪除元素低價較大;
LinkedList則長於在中間插入刪除元素。
用Collections.sort方法對list排序有兩種方法
第一種是list中的物件實現Comparable介面.
第二種方法是根據Collections.sort過載方法來實現
如:
public class User { //此處無需實現Comparable接
private String name;
private Integer order;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrder() {
return order;
}
public void setOrder(Integer order) {
this.order = order;
}
}
public class Test{
public static void main(String[] args) {
User user1 = new User();
user1.setName("a");
user1.setOrder(1);
User user2 = new User();
user2.setName("b");
user2.setOrder(2);
list = new ArrayList<user>();
list.add(user2);
list.add(user1);
Collections.sort(list,new Comparator<user>(){
public int compare(User arg0, User arg1) {
return arg0.getOrder().compareTo(arg1.getOrder());
}
});
for(User u : list){
System.out.println(u.getName());
}
}
}
下面是List常用的方法:
Random rand=new Random(47);
List<String> s=new LinkedList<String>(),sub=new LinkedList<String>();
String h=new String();
s.contains(h);//判斷某個物件是否在列表中
s.remove(h);//
s.indexOf(p);//發現該物件在List中所處位置的編號
sub=s.subList(fromIndex, toIndex);//從列表中創造出一個片段
s.containsAll(sub);
s.retainAll(Collection<?> c);//求s與c的交集
s.removeAll(c);//從s中移除所有的c
s.addAll(1,c);//在1後面新增c
Object [] o=s.toArray();//將任意的Collection物件轉化成陣列
Comparable & Comparator 都是用來實現集合中元素的比較、排序的,只是 Comparable 是在集合內部定義的方法實現的排序,Comparator 是在集合外部實現的排序,所以,如想實現排序,就需要在集合外定義 Comparator 介面的方法或在集合內實現 Comparable 介面的方法。
Comparator位於包java.util下,而Comparable位於包 java.lang下
Comparable 是一個物件本身就已經支援自比較所需要實現的介面(如 String、Integer 自己就可以完成比較大小操作,已經實現了Comparable介面)
自定義的類要在加入list容器中後能夠排序,可以實現Comparable介面,在用Collections類的sort方法排序時,如果不指定Comparator,那麼就以自然順序排序,如API所說:
Sorts the specified list into ascending order, according to the natural ordering of its elements. All elements in the list must implement the Comparable interface
這裡的自然順序就是實現Comparable介面設定的排序方式。
而 Comparator 是一個專用的比較器,當這個物件不支援自比較或者自比較函式不能滿足你的要求時,你可以寫一個比較器來完成兩個物件之間大小的比較。
可以說一個是自已完成比較,一個是外部程式實現比較的差別而已。
用 Comparator 是策略模式(strategy design pattern),就是不改變物件自身,而用一個策略物件(strategy object)來改變它的行為。
比如:你想對整數採用絕對值大小來排序,Integer 是不符合要求的,你不需要去修改 Integer 類(實際上你也不能這麼做)去改變它的排序行為,只要使用一個實現了 Comparator 介面的物件來實現控制它的排序就行了。
相關文章
- Java 中 Comparable 和 Comparator 比較Java
- 【Java】Collection.sort以及比較器ComparatorJava
- Java Comparable排序介面和Comparator比較器介面Java排序
- 比較器-Comparable和Comparator
- 【IOS】java 與oc之間的比較iOSJava
- Docker 與 Podman 容器管理的比較Docker
- [java之list比較]Java
- Java Comparable 與 ComparatorJava
- JavaScript 與 Java、PHP 的比較JavaScriptPHP
- java8-Lambda中比較器Comparator的使用Java
- Java物件之間的比較之equals和==Java物件
- 雲原生Java與Golang比較 -lgorJavaGolang
- Java JIT與AOT效能比較 - foojayJava
- Java 容器和泛型(3)HashSet,TreeSet 和 LinkedHashSet比較Java泛型
- Java 容器和泛型(2)ArrayList 、LinkedList和Vector比較Java泛型
- ASP.NET 與 JAVA 的比較 (轉)ASP.NETJava
- Java 比較器Java
- JAVA字串比較Java字串
- 比較Windows和Linux SQL容器WindowsLinuxSQL
- java基礎之Comparator和ComparableJava
- Java,Go和Rust之間的比較 - DexterJavaGoRust
- Java中對HashMap的深度分析與比較JavaHashMap
- Ajax 之戰:XMLHttpRequest與Fetch API比較XMLHTTPAPI
- 容器叢集管理平臺的比較
- java比較日期大小Java
- Java和JavaSciprt比較Java
- java--BEAN比較JavaBean
- JAVA IO效能比較Java
- 從java內建類和自定義類比較Comparable介面和Comparator介面實現排序的不同Java排序
- Java5.0與ActionScript3.0語法比較Java
- Java中對HashMap的深度分析與比較(轉)JavaHashMap
- Java之容器Java
- Vue與React比較VueReact
- 【Redis與Memcached比較】Redis
- RecyclerView與ListView比較View
- js與jq比較JS
- PostgreSQL與MySQL比較MySql
- Vuex與Redux比較VueRedux