Map集合的添加功能:
* V put(K key,V value):添加元素
* 如果键是第一次存储,就直接存储元素,返回null
* 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
Map集合的删除功能:
* void clear():移除所有的键值对元素
* V remove(Object key):根据键删除键值对元素,并把值返回
Map集合的判断功能:
* boolean containsKey(Object key):判断集合是否包含指定的键
* boolean containsValue(Object value):判断集合是否包含指定的值
* boolean isEmpty():判断集合是否为空
Map集合的获取功能:
* Set<Map.Entry<K,V>> entrySet=map.entrySet():
* V get(Object key):根据键获取值
* Set<K> keySet=map.KeySet():获取集合中所有键的集合
* Collection<V> values=map.values():获取集合中所有值的集合
Map集合的长度功能:
* int size():返回集合中的键值对的个数
Map<String, Integer> map = new HashMap<>(); //Map接口的创建
System.out.println(map); //输出顺序根据底层的哈希算法
Map的new为什么是Map map=new HashMap();而不是new Map();?
因为map是个接口,而接口不能被实例化!
HashMap是map接口的实现类
Map.Entry说明Entry是Map的内部接口,将键和值封装成了Entry对象
Map<String, Integer> map = new HashMap<>();
for(Entry<String, Integer> en : map.entrySet()) {
System.out.println(en.getKey() + "=" + en.getValue());
}
en.getKey():获取键
en.getValue():获取值
interface Inter { //接口的接口
interface Inter2 {
public void show();
}
}
class Demo implements Inter.Inter2 { //实现
@Override
public void show() {
}
}
//LinkedHashMap可以保证怎么存就怎么取
LinkedHashMap<String, Integer> lhm = new LinkedHashMap<>();
lhm.put("张三", 23);
System.out.println(lhm);
//创建TreeMap类
TreeMap<Integer, String> tm = new TreeMap<>();
//Collecitons集合中的常见方法
ArrayList<String> list = new ArrayList<>();
Collections.sort(list); //将集合排序
Collections.binarySearch(list, String str); //二分查找
Collections.shuffle(list); //随机打乱顺序,可以用来洗牌
Collections.reverse(list); //反转集合
Collections.max(list); //根据默认排序结果获取集合中的最大值
* Collection
* List(存取有序,有索引,可以重复)
* ArrayList
* 底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
* LinkedList
* 底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
* Vector
* 底层是数组实现的,线程安全的,无论增删改查都慢
* 如果查找和修改多,用ArrayList
* 如果增和删多,用LinkedList
* 如果都多,用ArrayList
* Set(存取无序,无索引,不可以重复)
* HashSet
* 底层是哈希算法实现
* LinkedHashSet
* 底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
* TreeSet
* 底层是二叉树算法实现
* 一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
* TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别
* Map
* HashMap
* 底层是哈希算法,针对键
* LinkedHashMap
* 底层是链表,针对键
* TreeMap
* 底层是二叉树算法,针对键
* 开发中用HashMap比较多
//嵌套HashMap的使用
HashMap<Student, String> hm1 = new HashMap<>();
HashMap<Student, String> hm2 = new HashMap<>();
HashMap<HashMap<Student, String>, String> hm = new HashMap<>();
hm.put(hm1, "");
hm.put(hm2, "");
//遍历双列集合
for(HashMap<Student, String> h : hm.keySet()) { //hm.keySet()代表的是双列集合中键的集合
String value = hm.get(h); //get(h)根据键对象获取值对象
//遍历键的双列集合对象
for(Student key : h.keySet()) { //h.keySet()获取集合总所有的学生键对象
String value2 = h.get(key);
System.out.println(key + "=" + value2 + "=" + value);
}
}
HashMap和Hashtable的共同点与区别
* 共同点:
* 底层都是哈希算法,都是双列集合
* 区别:
* 1,HashMap是线程不安全的,效率高,JDK1.2版本
* Hashtable是线程安全的,效率低,JDK1.0版本的
* 2,HashMap可以存储null键和null值
* Hashtable不可以存储null键和null值