通过学生的学号sid,获取学生的信息(姓名....)
现在使用单列集合Collection<E></>--->List /Set
List<Student>,本身就是将整个对象存储进去了,获取方式直接获取学生数据,遍历---->判断sid是多少
所以Java提供 Map<K,V> 键值对(映射项),一个键(必须唯一)对应一个值(值可以重复)
面试题
Map和Collection的区别 ?
Collection<E>:单例集合,只能存储一种引用类型数据 遍历方式和Map不同;
Collection集合的应用范围大:
ArrayList
Vector
LinkedList
它里面的部分集合和Map有关联(HashSet--->依赖HashMap / TreeSet---->依赖于TreeMap)
Map<K,V>,双列集合---->可以存储键值对("夫妻对")
遍历方式:通用方式 获取所有的键,通过键找值!
应用范围:
HashMap---->存储 和 获取 (默认使用)
TreeMap---->存储---获取(按照排序规则排序)
Map---->称为 "实体"
Map<Integer,Product>
Map(针对键有效,键必须唯一!)的基本功能
添加:
V put(K key, V value):添加键值对元素,返回值什么意思?
map针对键有效,键如果唯一的,返回是null;
如果重复,将后面的键对应的值把前面的值覆盖了,返回第一次键对应的值
删除:
V remove(Object key):删除键,返回键对应的值
void clear():暴力删除,将map清空掉
判断:
boolean containsKey(Object key):判断Map集合是否包含指定的键,包含返回true,否则false
boolean containsValue(Object value):判断Map集合是否包含指定的值,包含则返回true,否则false
boolean isEmpty() :判断集合是否为空
遍历Map集合的方式
1)获取所有的键的集合 Set<K> keySet() (通用的遍历方式) --->"获取所有的丈夫",丈夫自己妻子
结合 V get(Object key):通过键找值
例如:
获取所有的键的集合 Set<K> keySet() (通用的遍历方式) 结合 V get(Object key):通过键找值
Set<String> keySet = map.keySet() ; for(String key:keySet){ //通过键获取值 String value = map.get(key); System.out.println(key+"---"+value) ;
2)Set<Map.Entry<K,V>> entrySet() :获取Map结合的键值对对象 ---->"获取所有结婚",找丈夫,找妻子
Set<Map.Entry<String, String>> entry = map.entrySet() ; //遍历所有映射项(一个键->一个值) for(Map.Entry<String, String> en:entry){ //K getKey():通过键值对对象,获取键 //K getKey():通过键值对获取值 String key = en.getKey(); String value = en.getValue(); System.out.println(key+"---"+value)
HashMap---->put方法---->依赖于hashCode()+equals()方法 能够保证键唯一!
存储String,String类型重写了hashCode()+equals()方法,比较键的字符串内容是否相同!
HashMap<K,V> 存储键值对元素,保证K唯一,根据的类型有关系
如果K是自定义类型,
HashMap<Student,String> ,考虑保证学生对象唯一!
Key:Student类型
Value:String类型
要针对键有效,需要键的类型,需要重写equals()和hashCode()
equals():比较内容是否相同, hashCode():比较每一个成员信息的哈希码值是否一样
TreeMap<K,V>-->针对键有效,排序(自然排序/比较器排序)
构造方法:
public TreeMap():自然排序
public TreeMap(Comparator<? super K> comparator):比较器排序
如果键是自定义类型,键必须唯一,而且需要有排序规则!
TreeSet<Emplyee,String> 来按照学生的年龄从小到大排序(主要条件)
java.util.Collections:针对集合操作工具类
常用的方法
二分搜索法,在指定List集合中查询指定元素第一次出现索引值 (集合的元素有序)
public static <T> int binarySearch(List<? extends Comparable<? super T>> list,T key)
public static <T> T max(Collection<? extends T> coll):针对Collection集合获取最大值(自然顺序比较获取最大值)
public static <T> T min(Collection<? extends T> coll):针对Collection集合获取最小值(自然顺序比较获取最小值)
public static void reverse(List<?> list):将List集合的元素反转
public static void shuffle(List<?> list):针对List集合随机置换
public static <T extends Comparable<? super T>> void sort(List<T> list):针对List集合按照自然顺序排序
public static <T extends Comparable<? super T>> void sort(List<T> list,Comparator<T> com):
针对List集合按照比较器进行排序