Java集合類知識點總結(jié)
集合:只能存儲對象,對象類型可以不一樣,長度可變。
常用的接口和類:
1、List接口(有序、可重復(fù)):ArrayList類、LinkedList、Vector類
2、Set接口(無序、不能重復(fù)):HashSet類、TreeSet類
3、Map接口(鍵值對、鍵唯一、值不唯一):HashMap類、Hashtable類、TreeMap類
集合類的循環(huán)遍歷
1、普通for循環(huán):如 for(int i=0;i<arr.size();i++){…}
2、foreach(增強型for循環(huán)):如 for(Object i:arr){…}
3、Iterator(迭代器):如 Iterator it = arr.iterator();while(it.hasNext()){ Object o =it.next(); …}
注意:無法在遍歷的過程中對數(shù)組或者集合進行修改,而for循環(huán)可以在遍歷的過程中對源數(shù)組或者集合進行修改
ArrayList、LinkedList和Vector的區(qū)別
ArrayList:效率高,多用于查詢
LinkedList:多用于插入和刪除
Vector:線程安全,多用于查詢
代碼:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;
public class ListTest {
public static void main(String[] args){
List arrayList=new ArrayList();
List linkedList=new LinkedList();
List vector=new Vector();
arrayList.add("1"); //字符類型
arrayList.add("1"); //重復(fù)元素
arrayList.add("2");
arrayList.add(1); //數(shù)字類型
linkedList.add("1");
linkedList.add("1");
linkedList.add("2");
linkedList.add(1);
vector.add("1");
vector.add("1");
vector.add("2");
vector.add(1);
for(Object obj:arrayList){ //foreach循環(huán)
System.out.println(obj);
}
for(int i=0;i<linkedList.size();i++){ //普通for循環(huán)
System.out.println(arrayList.get(i));
}
Iterator it = vector.iterator(); //迭代器
while(it.hasNext()){
Object j=it.next();
System.out.println(j);
}
}
}
HashSet和TreeSet的區(qū)別
HashSet:HashSet 是哈希表實現(xiàn)的,HashSet中的數(shù)據(jù)是無序的,可以放入null,但只能放入一個null
TreeSet:TreeSet是二差樹實現(xiàn)的,Treeset中的數(shù)據(jù)是自動排好序的,不允許放入null值
代碼:
public class SetTest {
public static void main(String[] args){
Set hashSet=new HashSet();
Set treeSet=new TreeSet();
hashSet.add("1"); //字符類型
hashSet.add("1"); //重復(fù)元素
hashSet.add("2");
hashSet.add(1); //數(shù)字類型
treeSet.add("1");
treeSet.add("1");
treeSet.add("2");
// treeSet.add(1); //報錯,treeSet不能添加不同的數(shù)據(jù)類型
for(Object i:hashSet){ //foreach循環(huán)
System.out.println(i);
}
Iterator it = treeSet.iterator(); //迭代器
while(it.hasNext()){
Object j=it.next();
System.out.println(j);
}
}
}
注意:Set接口沒有g(shù)et方法,所以不能使用普通for循環(huán)來遍歷
HashMap、Hashtable和TreeMap的區(qū)別
HashMap:HashMap允許存在一個為null的key,多個為null的value
Hashtable:hashtable的key和value都不允許為null
TreeMap:能夠把它保存的記錄根據(jù)鍵排序,默認是按鍵值的升序排序,也可以指定排序的比較器,當(dāng)用Iterator 遍歷TreeMap時,得到的記錄是排過序的
代碼:
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class MapTest {
public static void main(String[] args){
Map hashMap=new HashMap();
Map hashtable=new Hashtable();
Map treeMap=new TreeMap();
hashMap.put(1, "1"); //字符類型值
hashMap.put(2, "1"); //同值不同鍵
hashMap.put(3, "2");
hashMap.put(4, 1); //數(shù)字類型值
hashMap.put("5", 1); //字符類型鍵
hashtable.put(1, "1");
hashtable.put(2, "1");
hashtable.put(3, "2");
hashtable.put(4, 1);
hashtable.put("5", 1);
treeMap.put(1, "1");
treeMap.put(2, "1");
treeMap.put(5, "2");
treeMap.put(4, 1);
// treeMap.put("5", 1); //報錯,TreeMap不能添加不同類型的鍵
//遍歷hashMap鍵
for(Object key:hashMap.keySet()){
System.out.println(key);
}
//遍歷hashtable值
for(Object value:hashtable.values()){
System.out.println(value);
}
//遍歷hashMap鍵值對
Set set = hashMap.keySet();
for(Iterator iter = set.iterator(); iter.hasNext();){
Object key = iter.next();
Object value = hashMap.get(key);
System.out.println(key+"\t"+value);
}
//迭代遍歷hashtable鍵值對,倒序!
Iterator table = hashtable.entrySet().iterator();
while(table.hasNext()){
Map.Entry entry = (Map.Entry) table.next();
Object key = entry.getKey(); //取鍵
Object value = entry.getValue(); //取值
System.out.println(key+"\t"+value);
}
//迭代遍歷treeMap鍵值對
Iterator tmp = treeMap.entrySet().iterator();
while(tmp.hasNext()){
Map.Entry entry = (Map.Entry) tmp.next();
Object key = entry.getKey(); //取鍵
Object value = entry.getValue(); //取值
System.out.println(key+"\t"+value);
}
}
}
關(guān)于線程安全的類有:Vecto、HashTabl、StringBuffe
非線程安全:ArrayList 、LinkedList、HashMap、HashSet、TreeMap、TreeSet、StringBulider
注意:ConcurrentHashMap可代替HashMap用于線程安全,且效率比Hashtable高
java自身的機制并不能完全保證線程安全。需要自己手動編碼控制。
相關(guān)文章
Spring?Data?Jpa?復(fù)雜查詢方式總結(jié)(多表關(guān)聯(lián)及自定義分頁)
這篇文章主要介紹了Spring?Data?Jpa?復(fù)雜查詢方式總結(jié)(多表關(guān)聯(lián)及自定義分頁),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
帶你走進Maven的大門-最全Maven配置及集成idea工具總結(jié)
Maven項目對象模型(POM),是一個項目管理工具可以通過一小段描述信息來管理項目的構(gòu)建,報告和文檔的軟件.那我們想要在IDEA中使用Maven得進行一些配置,接下來我們具體看一下是如何配置使用的,需要的朋友可以參考下2021-06-06
MyBatis解決Update動態(tài)SQL逗號的問題
這篇文章主要介紹了MyBatis解決Update動態(tài)SQL逗號的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
深入解析Jdk8中Stream流的使用讓你脫離for循環(huán)
這篇文章主要介紹了Jdk8中Stream流的使用,讓你脫離for循環(huán),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02

