Map是一个接口类,该类没有继承自Collection,该类中存储的是
Map.Entry
注意:Map.Entry
注意:
- Map是一个接口,不能实例化对象,如果要实例化对象只能实例化其实现类TreeMap或HashMap
- Map中存放键值对的Key是唯一的,Value是可以重复的
- 在Map中插入键值对时,key只能有一个null,如果插入两个,前一个会被覆盖。但是TreeMap不可以为null,否则会抛出异常。
- Map中的Key可以分离出来,存储到Set中进行访问(因为Key不能重复)
- Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)
- Map中键值对的Key不可以被修改,Value可以被修改。如果要修改Key,先删除再重新添加
- TreeMap和HashMap的区别
import java.util.Map;
import java.util.TreeMap;
public class treeMapDemo {
public static void treeMapDemo(){
Map map=new TreeMap<>();
map.put("林冲","豹子头");
map.put("鲁智深", "花和尚");
map.put("武松", "行者");
map.put("宋江", "及时雨");
String str = map.put("李逵", "黑旋风");//看源码,put方法的返回值是key-value中的V
System.out.println(map.size());
System.out.println(map);
// put(key,value): 注意key不能为空,但是value可以为空
// key如果为空,会抛出空指针异常
//m.put(null, "花名");
str=map.put("无名",null);
System.out.println(map.size());
// put(key, value):
// 如果key存在,会使用value替换原来key所对应的value,返回 旧value
str = map.put("李逵", "铁牛");
// get(key): 返回key所对应的value
// 如果key存在,返回key所对应的value
// 如果key不存在,返回null
System.out.println(map.get("鲁智深"));
System.out.println(map.get("史进"));
//GetOrDefault(): 如果key存在,返回与key所对应的value,如果key不存在,返回一个默认值
System.out.println(map.getOrDefault("李逵", "铁牛"));
System.out.println(map.getOrDefault("史进", "九纹龙"));
System.out.println(map.size());
//containKey(key):检测key是否包含在Map中,时间复杂度:O(logN)
// 按照红黑树的性质来进行查找
// 找到返回true,否则返回false
System.out.println(map.containsKey("林冲"));
System.out.println(map.containsKey("史进"));
// containValue(value): 检测value是否包含在Map中,时间复杂度: O(N)
// 因为TreeMap是按照Key进行组织的,因此查找value时候就需要整体遍历
// 找到返回true,否则返回false
System.out.println(map.containsValue("豹子头"));
System.out.println(map.containsValue("九纹龙"));
// 打印所有的key
// keySet是将map中的key放置在Set中返回的
for (String s:map.keySet()) {
System.out.print(s+" ");
}
System.out.println();
// 打印所有的value
// values()是将map中的value放在collection的一个集合中返回的
for (String s:map.values()) {
System.out.print(s+" ");
}
System.out.println();
// 打印所有的键值对
// entrySet(): 将Map中的键值对放在Set中返回了
for (Map.Entryentry:map.entrySet()) {
System.out.print(entry.getKey()+"--->"+entry.getValue()+" ");
}
}
public static void main(String[] args) {
treeMapDemo();
}
}
2.Set
Set与Map主要不同有两点:
1.Set继承自Collection接口的实现类
2.Set中只存储了key
注意:
- Set是继承自Collection接口的一个接口类
- Set中只存储了Key,并且要求Key一定要唯一
- Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
- Set的最大作用就是对集合中的元素去重
- 实现Set接口的常用类是TreeSet和HashSet,还有linkedHashSet,linkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入顺序
- Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入
- HashSet可以插入null,但只能插入一个,而TreeSet不允许插入为null,否则会抛出空指针异常
- TreeSet和HashSet的区别:
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class treeSetDemo {
public static void treeSet(){
Setset=new TreeSet<>();
// add(key): 如果key不存在,则插入,返回true
// 如果key存在,返回false
boolean isIn=set.add("apple");
set.add("orange");
set.add("peach");
set.add("banana");
System.out.println(set.size());
System.out.println(set);
isIn=set.add("apple");
// add(key): key如果是空,抛出空指针异常
//s.add(null);
// contains(key): 如果key存在,返回true,否则返回false
System.out.println(set.contains("apple"));
System.out.println(set.contains("watermelen"));
// remove(key): key存在,删除成功返回true
// key不存在,删除失败返回false
// key为空,抛出空指针异常
set.remove("apple");
System.out.println(set);
set.remove("watermelen");
System.out.println(set);
// 抛出空指针异常
// s.remove(null);
Iteratoriterator= set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next() + " ");
}
System.out.println();
}
public static void main(String[] args) {
treeSet();
}
}
TreeSet和HashSet有什么区别?



