Map集合與Collection不是從屬關係,是平級的html
Map集合的映射特色java
Map<KEY,VALUE>:KEY和VALUE表示泛型,KEY和VALUE能夠是任何數據類型【除基本數據類型以外】,實際項目中KEY通常是String類型node
一個映射不能包含重複的鍵:web
若是存在重複的KEY,則後面添加的會把前面的覆蓋windows
其實鍵就是Set,元素惟一,只能有一個null,安全
元素是無序的(與添加順序無關)app
HashMap不是同步的,即線程不安全less
如何將HashMap變成線程安全?ide
Collections.synchronizedMap(<HashMap集合>);
public static void main(String[] args) {
Map<String, String> maps = new HashMap<>();
/*1.添加*/
//加入單條鍵值對
maps.put("智多星","吳用");
maps.put("豹子頭","林沖");
maps.put("玉麒麟","盧俊義");
Map<String, String> map1 = new HashMap<>();
map1.put("小諸葛","富安");
map1.put("及時雨","宋江");
//加入一個集合:將一個集合複製到另外一個集合中
maps.putAll(map1);
System.out.println("map集合:"+maps);
System.out.println("map1集合:"+map1);
/*2.清空*/
map1.clear();
System.out.println("map1是否爲空:"+map1.isEmpty()); //isEmpty()檢查集合是否爲空 返回布爾值
/*3.獲取*/
//獲取VALUE,經過KEY獲取VALUE
System.out.println("獲取智多星的值:"+maps.get("智多星"));
//獲取所有的KEY,返回一個Set集合
Set<String> KEYSET = maps.keySet();
System.out.println("獲取KEY的Set集合:"+KEYSET); //輸出Map集合中的KEY
/*4.遍歷集合*/
//遍歷集合:經過遍歷Set集合的KEYSET,來獲取集合的值VALUE
System.out.println("===============\n經過for()加強遍歷HashMap集合");
for (String str : KEYSET) {
String value = maps.get(str);
System.out.println(str+"——>"+value);
}
//遍歷集合:經過entrySet(),返回 Set<Map.Entry<K,V>>,一個Set集合
System.out.println("===============\n經過entrySet()遍歷HashMap集合");
Set<Map.Entry<String, String>> entries = maps.entrySet();
for (Map.Entry<String, String> entry : entries) {
//獲取KEY
String key = entry.getKey();
//獲取VALUE
String value = entry.getValue();
System.out.println(key+"——>"+value);
}
/*5.判斷功能*/
//是否包含指定的鍵KEY,返回布爾值
System.out.println("maps集合中是否包含」玉麒麟「這個KEY:"+(maps.containsKey("玉麒麟")?"是":"否"));
//是否包含指定的值VALUE,返回布爾值
System.out.println("maps集合中是否包含」宋江「這個VALUE:"+(maps.containsValue("宋江")?"是":"否"));
//檢查集合是否爲空null
System.out.println("maps集合是否爲空:"+(maps.isEmpty()?"是":"否"));
//HashMap不能同步,即線程不安全
/*6.如何線程安全?*/
Collections.synchronizedMap(maps);
Collections.synchronizedMap(map1);
}
特色svg
代碼
xxxxxxxxxx
public static void main(String[] args) {
/*LinkedHashMap*/
Map<String, String> maps = new LinkedHashMap<>();
maps.put("智多星","吳用");
maps.put("豹子頭","林沖");
maps.put("玉麒麟","盧俊義");
//LinkedHashMap根據元素添加順序進行排序
System.out.println(maps);
/*HashMap*/
Map<String, String> hashmap = new HashMap<String, String>();
hashmap.put("智多星","吳用");
hashmap.put("豹子頭","林沖");
hashmap.put("玉麒麟","盧俊義");
//排序與添加順序無關
System.out.println(hashmap);
//綜上比較LinkedHashMap和HashMap之間的區別即元素是否有序
}
/*
LinkedHashMap-->{智多星=吳用, 豹子頭=林沖, 玉麒麟=盧俊義}
HashMap-->{玉麒麟=盧俊義, 智多星=吳用, 豹子頭=林沖}
*/
不多用到,須要自定義比較器
TreeMap能夠參考TreeSet,TreeMap能夠支持Map的排序
TreeMap根據鍵KEY的天然順序進行排序,或者根據建立映射【鍵和值相對應】時提供的Comparator進行排序,具體取決於使用的構造方法。
特色
能夠按照KEY來排序
xxxxxxxxxx
/*
Student實現Comparable接口,則TreeMap能夠根據KEY來排序
*/
public class Student implements Comparable<Student> {
private String name ;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/**
*
* @param o
* @return
* 自定義比較器:根據年齡來比較
*/
public int compareTo(Student o) {
return this.age - o.age;
}
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
xxxxxxxxxx
public class HashMapDemo02 {
public static void main(String[] args) {
Map<Student, String> maps = new TreeMap<>();
/*1.添加*/
//加入單條鍵值對
maps.put(new Student("智多星",30),"吳用");
maps.put(new Student("豹子頭",30),"林沖");
maps.put(new Student("玉麒麟",30),"盧俊義");
maps.put(new Student("小諸葛",25),"富安");
System.out.println(maps);
}
}
/*答案
//由於以年齡age爲排序依據,因此係統誤認爲第一條到第二條是同一條數據
//在Student中是設置根據年齡進行排序,TreeMap集合是根據KEY進行排序
{Student{name='小諸葛', age=25}=富安,
Student{name='智多星', age=30}=林沖,
Student{name='玉麒麟', age=33}=盧俊義}
*/
不經常使用
特色