一纸淮、Collections集合工具類
(1)常用方法
- Collections.min();最小值
- Collections.max();最大值
- Collections.sort();對集合進行排序
- Collections.swap();交換集合中指定元素索引的位置
- Collections.reverse();反轉(zhuǎn)集合中元素的順序
- Collections.shuffle();對集合進行隨機排序
- Collections.fill();替換集合list中的所有元素
- Collections.copy();將集合a中的元素全部復(fù)制到b中,并且覆蓋相應(yīng)索引的元素
- Collections.replaceAll();替換指定元素為某元素,替換值存在剛返回true亚享,反之返回false
- Collections.indexOfSubList();查找子集在list中首次出現(xiàn)位置的索引
- Collections.lastIndexOfSubList();查找子集在list中最后一次出現(xiàn)位置的索引
- Collections.binarySearch);查找指定集合中的元素咽块,返回所查找元素的索引
- Collections.rotate();集合中的元素向后移m個位置,在后面被遮蓋的元素循環(huán)到前面來
(2)設(shè)置比較規(guī)則
//如果age為int類型需要轉(zhuǎn)為Integer
private class MyComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
return o1.getAge().compareTo(o2.getAge());
}
}
public class Person implements Comparable<Person> {
public Integer age;
public String name;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Person o) {
return this.age.compareTo(o.getAge());
}
}
二虹蒋、List集合
(1)集合常用方法
- list.add();添加數(shù)據(jù)
- list.addAll();添加數(shù)據(jù)集合
- list.remove();刪除數(shù)據(jù)
- list.removeAll();刪除數(shù)據(jù)集合
- list.set();修改數(shù)據(jù)
- list.get();查找數(shù)據(jù)
- list.subList();截取集合(包前不包后)
- list.clear();清空集合數(shù)據(jù)
- list.isEmpty();判斷集合中是否存在元素
- list.size();獲取集合大小
- list.toArray();集合變數(shù)組
- list.contains();List中是否包含該元素
- list.containsAll();List中是否包含該集合
- list.indexOf();List中首次出現(xiàn)該元素的位置糜芳。
- list.lastIndexOf();List中最后一次出現(xiàn)該元素的位置。
- list.iterator();迭代器魄衅,用于遍歷取出元素
(2)ArrayList詳解
- ArrayList是基于數(shù)組實現(xiàn)的list類峭竣,ArrayList其實是對數(shù)組的動態(tài)擴充,底層的數(shù)據(jù)結(jié)構(gòu)使用的是數(shù)組結(jié)構(gòu)晃虫,不指定的話長度默認為10皆撩。
- ArrayList插入數(shù)據(jù)可以重復(fù),也是有序的哲银,按照插入的順序來排序扛吞。修改或查詢數(shù)據(jù)相對快。添加或刪除數(shù)據(jù)相對慢荆责,因為需要移動大量的數(shù)據(jù)滥比。ArrayList是線程不安全的。
- list.ensureCapacity();擴充原有的數(shù)組
(3)LinkedList詳解
- LinkedList是基于鏈表實現(xiàn)的雙向鏈表數(shù)據(jù)結(jié)構(gòu)做院。它每一個節(jié)點都包含三方面的內(nèi)容:節(jié)點本身的數(shù)據(jù)盲泛、前一個節(jié)點的信息濒持、下一個節(jié)點的信息。
- 增加或刪除數(shù)據(jù)相對快寺滚。修改或查詢數(shù)據(jù)相對慢柑营,因為需要遍歷查找
(4)Vector
- Vector中的很多重要方法都是用synchronized實現(xiàn)同步,保證線程安全村视。Vector是線程安全的ArrayList官套。
二、set集合
(1)HashSet
- HashSet無序不允許集合元素的重復(fù)蚁孔,可以存儲null奶赔。底層數(shù)據(jù)結(jié)構(gòu)是哈希表。根據(jù)hashCode來決定存儲位置的勒虾。非線程安全纺阔,存取速度快。
- 通過hashCode和equals來保證元素的唯一性修然。如果元素的hashCode相同才會判斷equals是否為true。如果hashCoed的值不同质况,則不會調(diào)用equals愕宋。
(2)TreeSet
- TreeSet不允許集合元素的重復(fù)。底層數(shù)據(jù)結(jié)構(gòu)是二叉樹结榄,線程不安全中贝。可以對Set集合中的元素進行排序
- TreeSet的排序讓元素自身具備比較性臼朗,元素需要實現(xiàn)comparable接口邻寿,覆蓋compareTo方法,如果兩個對象通過compareTo()方法比較相等视哑,那么新的元素將無法添加到TreeSet集合中绣否。
public class Person implements Comparable<Person> {
public Integer age;
public String name;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Person o) {
return this.age.compareTo(o.getAge());
}
}
- 當元素本身不具備比較性,或者具備的比較性不是所需的挡毅,就需要讓集合自身具備比較性
public static void treeSetTest(){
TreeSet treeSet = new TreeSet(new Comparator(){
public int compare(Object o1,Object o2){
M m1 = (M)o1;
M m2 = (M)o2;
return m1.age > m2.age ? -1 : m1.age < m2.age ? 1 : 0;
}
});
treeSet.add(new M(2));
treeSet.add(new M(8));
treeSet.add(new M(5));
treeSet.add(new M(-3));
}
static class M(){
int age;
public M(int age){
this.age = age;
}
}
(3)LinkedHashSet
- LinkedHashSet不允許集合元素的重復(fù)蒜撮。集合也是根據(jù)元素的hashCode值來決定元素的存儲位置,但和hashSet不同的是它同時使用鏈表維護元素的次序跪呈,這樣使得元素看起來是以插入的順序保存的段磨。linkedHashSet按元素的添加順序來訪問集合里的元素。(LinkedHashSet需要維護元素的插入順序耗绿,因此性能略低于HashSet的性能苹支,但是在遍歷Set里面的全部元素將有很好的性能)
三、Map集合
- Map<K, V>集合是一個接口误阻,和Collection集合不同的是债蜜,它是雙列集合晴埂,也就是說他所存儲的是鍵值對。其中鍵要求唯一策幼,一個鍵不能對應(yīng)多個值邑时。
- put():添加鍵值對
- get():根據(jù)鍵獲取值
- containsKey():判斷是否包含鍵
- containsValue();判斷是否包含值
- remove():刪除鍵值對
- replace():替換新值特姐,返回老值
- replace(K key, V oldValue, V newValue):替換新值
- Set<Map.Entry<K,V>> entrySet(): 包含所有鍵值對的Map對象的Set集合
- Collection<V> values(): 獲取包含所有值的Collection集合
- Set<K> keySet(): 獲取包含所有鍵的Set集合
(1)TreeMap
- TreeMap是平衡排序二叉樹(紅黑樹)結(jié)構(gòu)晶丘,按自然排序或比較器存入元素以保證元素順序。TreeMap的鍵保唯一性唐含,取決于比較方法和比較器浅浮。非線程安全。
(2)HashMap
- HashMap是哈希表結(jié)構(gòu)捷枯,不保證存取順序滚秩,允許null鍵或者null值。HashMap的鍵保持唯一性淮捆,取決于hashCode以及equals方法郁油。非線程安全,效率較高攀痊。
(3)HashTable
- HashTable時哈希表結(jié)構(gòu)桐腌,不保證存取順序,不允許null鍵或者null值苟径,線程安全案站,效率較低,已經(jīng)被HashMap替代
(4)LinkedHashMap
- LinkedHashMap是帶雙向鏈表的哈希表結(jié)構(gòu)棘街,保持存取順序蟆盐,允許null鍵和null值,非線程安全遭殉,效率較高石挂。