Vector集合類
特點(diǎn):
1.這個(gè)類是從jdk1.0開始的创倔,里面的操作API和ArraysList幾乎相同,從jdk1.2之后姻采,如果不要求線程安全,建議使用ArraysList
2.Vector是線程安全的
3.Vector底層使用的是對(duì)象數(shù)組來進(jìn)行存儲(chǔ)
4.Vector初始容量為10
常用的API方法
1.void addElement(E obj) 添加指定的組件到這個(gè)向量的結(jié)束,增加其大小由一個(gè)委刘。
2.int capacity() 返回此向量的當(dāng)前容量。
3.Enumeration<E> elements() 返回此向量的組件的枚舉鹰椒。
4.void sort(Comparator<? super E> c) 分類列表使用提供的 Comparator比較元素锡移。
Vector<String> vector=new Vector<>();
vector.add("智游");
//添加指定的組件到這個(gè)向量的結(jié)束,增加其大小由一個(gè)
vector.addElement("鄭州");
//回此向量的當(dāng)前容量
int capacity = vector.capacity();
System.out.println(capacity+"----");
//返回此向量的組件的枚舉
Enumeration<String> elements = vector.elements();
while (elements.hasMoreElements()){
String s = elements.nextElement();
System.out.println(s);
}
//分類列表使用提供的 Comparator比較元素
//匿名內(nèi)部類
vector.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.hashCode()-o2.hashCode();
}
});
System.out.println(vector);
總結(jié):
ArraysList和LinkedList異同:
1.ArraysList底層是一個(gè)數(shù)組需要進(jìn)行容器的初始化漆际,LinkedList是一個(gè)雙向鏈表結(jié)構(gòu)淆珊,不需要容器初始化
2.ArraysList容器需要進(jìn)行擴(kuò)容,每次擴(kuò)容的大小為原來的1.5倍奸汇,LinkedList不需要進(jìn)行擴(kuò)容
3.ArraysList的檢索效率相對(duì)較高套蒂,如果頻繁進(jìn)行擴(kuò)容和添加刪除元素,效率相對(duì)較低
LinkedList的檢索效率相對(duì)較低茫蛹,添加和刪除元素效率相對(duì)較高操刀,創(chuàng)建一個(gè)新結(jié)點(diǎn),更新下引用地址即可
ArrayList和Vector異同
1.ArrayList是一個(gè)線程不安全的婴洼,執(zhí)行效率相對(duì)較高骨坑,而Vector是一個(gè)線程安全的,執(zhí)行效率相對(duì)較低
2.ArrayList擴(kuò)容每次為原來的1.5倍,Vector擴(kuò)容每次為原來的2倍
LinkedHashSet集合
1.保留了父類HashSet當(dāng)中的API方法欢唾,繼承了當(dāng)中的特點(diǎn)
2.該集合元素是有序的且警,通過它的新添加的鏈表來確定儲(chǔ)存元素的順序
TreeSet集合
1.它是Set接口的一個(gè)實(shí)現(xiàn)類
2.底層是紅黑樹
3.它實(shí)現(xiàn)了SortedSet接口,TreeSet集合可以保證集合元素帶有排序的特性
4.不需要進(jìn)行初始化礁遣,也不需要擴(kuò)容
5.不允許存儲(chǔ)null鍵和null值
常用API方法
TreeSet<Integer> treeSet=new TreeSet<>();
treeSet.add(123);
treeSet.add(1);
treeSet.add(10);
treeSet.add(124);
treeSet.add(30);
treeSet.add(50);
//獲取比該元素大的最小元素
Integer ceiling = treeSet.ceiling(120);
System.out.println(ceiling);
//獲取比該元素小的最大元素
Integer floor = treeSet.floor(12);
System.out.println(floor);
//取集合的首元素
Integer first = treeSet.first();
System.out.println(first);
//集合最后一個(gè)元素
Integer last = treeSet.last();
System.out.println(last);
//獲取比該元素大的最小元素
Integer higher = treeSet.higher(100);
System.out.println(higher);
//取集合的首元素
Integer integer = treeSet.pollFirst();
System.out.println(integer);
//取在該區(qū)間的元素
SortedSet<Integer> integers = treeSet.subSet(30, 123);
for (Integer integer1 : integers) {
System.out.print(integer1+" ");
}
System.out.println();
System.out.println(treeSet);
Map集合
1.Map它是一個(gè)雙列集合和Collection集合是一種并列關(guān)系
2.Map中的key和value是一一映射關(guān)系
3.Map中的key和value都可以存儲(chǔ)null值
4.Map中的key要求唯一且不重復(fù)
5.常用實(shí)現(xiàn)類:HashMap HashTable TreeMap LinkedHashMap Properties
HashMap:
1.HashMap() 構(gòu)造一個(gè)默認(rèn)的初始容量的空 HashMap(16)和默認(rèn)的加載因子(0.75)斑芜。
2.中存儲(chǔ)的元素不能保證有序(既不能保證帶有排序的特性,也不能保證存入和取出的順序一致)
三種方式:
一種就是直接獲取Map當(dāng)中所有的key值裝配到Set集合當(dāng)中
一種就是直接獲取Map當(dāng)中所有的value值裝配到Collection集合當(dāng)中
一種就是直接獲取Map當(dāng)中所有的key-value值裝配到Set集合當(dāng)中祟霍,但是Set集合當(dāng)中元素的類型為Entry<Key,Value>
//1
Set<Integer> integers = hashMap.keySet();
Iterator<Integer> iterator01 = integers.iterator();
while (iterator01.hasNext()){
Integer key = iterator01.next();
Integer value = hashMap.get(key);
System.out.print(key+"---"+value+" ");
}
System.out.println();
//2
Collection<Integer> values = hashMap.values();
System.out.print("map=");
for (Integer value:values){
System.out.print(value+" ");
}
System.out.println();
//3
Set<Map.Entry<Integer, Integer>> entries = hashMap.entrySet();
Iterator<Map.Entry<Integer, Integer>> iterator = entries.iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, Integer> entry = iterator.next();
Integer key = entry.getKey();
Integer value = entry.getValue();
System.out.print(key+"---"+value+" ");
}
TreeMap
特點(diǎn):
1.它是Map的實(shí)現(xiàn)類杏头,并且同時(shí)實(shí)現(xiàn)了SortedMap接口,在TreeMap內(nèi)部帶有排序的特性
2.它的底層使用的是紅黑樹結(jié)構(gòu)
3.它不需要進(jìn)行容器初始化沸呐,也不需要擴(kuò)容
4.它不允許存儲(chǔ)null鍵和null值
5.在TreeMap當(dāng)中判斷兩個(gè)Key是否相等依據(jù):compareTo(Object 0)或者compare(Object o1,Object o2)
常用API方法:
1.Map.Entry<K,V> ceilingEntry(K key) 返回的鍵值映射與最關(guān)鍵的大于或等于給定的鍵醇王,或 null如果沒有這樣的關(guān)鍵。
2.Map.Entry<K,V> floorEntry(K key) 返回的鍵值映射與最大的小于或等于給定的鍵崭添,或 null如果沒有這樣的關(guān)鍵寓娩。
3.K ceilingKey(K key) 最關(guān)鍵的收益大于或等于給定的鍵,或 null如果沒有這樣的關(guān)鍵呼渣。
4.K floorKey(K key) 返回最大關(guān)鍵小于或等于給定的鍵棘伴,或 null如果沒有這樣的關(guān)鍵。
5.Map.Entry<K,V> firstEntry() 返回一個(gè)與該圖的最小密鑰相關(guān)的鍵值映射屁置,或 null如果Map是空的排嫌。
6.Map.Entry<K,V> lastEntry() 返回一個(gè)與該Map的最大密鑰相關(guān)的鍵值映射,或 null如果Map是空的缰犁。
7.Map.Entry<K,V> higherEntry(K key) 返回的鍵值映射與最關(guān)鍵嚴(yán)格大于給定的鍵淳地,或 null如果沒有這樣的關(guān)鍵。
8.Map.Entry<K,V> lowerEntry(K key) 返回的鍵值映射與最大的關(guān)鍵嚴(yán)格小于給定的鍵帅容,或 null如果沒有這樣的關(guān)鍵颇象。
9.SortedMap<K,V> subMap(K fromKey, K toKey) 返回從這個(gè)Map的鍵范圍從 fromKey,包容的部分 toKey
TreeMap<String,String> treeMap=new TreeMap<>();
treeMap.put("abc","張三");
treeMap.put("bcd","李四");
treeMap.put("uvw","趙六");
treeMap.put("xyz","張三");
treeMap.put("mnp","田七");
treeMap.put("null","周八");
//獲取大于該鍵的最小元素
Map.Entry<String, String> entry = treeMap.ceilingEntry("gfh");
System.out.println(entry);
//獲取小于該鍵的最大元素
Map.Entry<String, String> opq = treeMap.floorEntry("opq");
System.out.println(opq);
//最關(guān)鍵的收益大于或等于給定的鍵并徘,或 null如果沒有這樣的關(guān)鍵
String xyz = treeMap.ceilingKey("efg");
String efg = treeMap.floorKey("efg");
System.out.println(xyz+"-"+efg);
//返回的鍵值映射與最關(guān)鍵嚴(yán)格大于給定的鍵遣钳,或 null如果沒有這樣的關(guān)鍵
Map.Entry<String, String> xxx = treeMap.higherEntry("xxx");
System.out.println(xxx);
//獲取的是指定范圍的子map
SortedMap<String, String> map = treeMap.subMap("bcd", "uvw");
System.out.println(map);
System.out.println(treeMap);
LinkedHashMap:
1.它是HashMap的子類,繼承了HashMap的特點(diǎn)
2.它的底層采用的是哈希表+鏈表結(jié)構(gòu)麦乞,能夠保證存入元素是有序的
3.允許存儲(chǔ)null
4.允許擴(kuò)容
5.需要進(jìn)行初始化
HashTable集合類:
1.它是map接口的實(shí)現(xiàn)類
2.它不允許存儲(chǔ)null值
3.它的底層使用的是哈希表
4.它需要進(jìn)行容器的初始化Hashtable()構(gòu)建一個(gè)新的哈希表默認(rèn)初始容量(11)和負(fù)載因子(0.75)
5.需要進(jìn)行動(dòng)態(tài)擴(kuò)容
6.線程是安全的
在jdk1.2之后 建議使用HashMap類
常用API:
Enumeration<V> elements() 返回哈希表中的值的枚舉蕴茴。 value值
Hashtable<String,String> hashtable=new Hashtable<>();
hashtable.put("abc","張三");
hashtable.put("bcd","李四");
hashtable.put("cbd","小四");
hashtable.put("cba","老三");
hashtable.put("cba","中三");
System.out.println(hashtable);
//返回哈希表中的值的枚舉
Enumeration<String> elements = hashtable.elements();
while (elements.hasMoreElements()) {
String s = elements.nextElement();
System.out.println(s);
}
Properties
1.它是HashTable的子類,主要用于對(duì)properties文件的讀寫操作
2.它對(duì)key和value值的數(shù)據(jù)類型都是字符串類型
3.對(duì)Properties集合進(jìn)行加載和設(shè)置通過getProperty()和setProperty()實(shí)現(xiàn)
Collection:
Java集合當(dāng)中的一個(gè)工具類
Arrays:是數(shù)組當(dāng)中的一個(gè)工具類
常用的API方法:
1.static <T> boolean addAll(Collection<? super T> c, T... elements) 將所有指定的元素添加到指定的集合中姐直。
2.static void reverse(List<?> list) 反轉(zhuǎn)指定列表中元素的順序倦淀。
3.static void shuffle(List<?> list) 隨機(jī)置換指定列表使用隨機(jī)默認(rèn)源。更改存儲(chǔ)的位置
4.static <T> void sort(List<T> list, Comparator<? super T> c) 根據(jù)指定的比較器指定的順序?qū)χ付ǖ牧斜磉M(jìn)行排序声畏。
List<String> coll=new ArrayList<>();
Collections.addAll(coll,"張三","李四","王五","趙六");
System.out.println(coll);
//翻轉(zhuǎn)
Collections.reverse(coll);{
System.out.println(coll);
//shuffle 打亂順序
Collections.shuffle(coll);
System.out.println(coll);