Map接口
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
Map接口最常用的实现类是HashMap
Map接口常用方法
方法名 | 说明 |
Object put(Object key,Object val) | 以“键-值”对的方式进行存储 |
Object get(Object key) | 根据键返回相关联的值,如果不存在指定的键,返回null |
Object remove(Object key) | 删除由指定的键映射的“键-值”对 |
int size() | 返回元素个数 |
Set keySet() | 返回键的集合 |
Collection values() | 返回值的集合 |
boolean containsKeys(Object key) | 如果存在由指定的键映射的“键-值”对,返回true |
遍历Map集合
方法1:通过迭代器Iterator实现遍历
Map<String, String> map = new HashMap<String, String>();
Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<String, String> entry = entries.next();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
方法2:增强型for循环
Map<String, String> map = new HashMap<String, String>();
for (String key : map.keySet()) {
String value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
方法3:键值对
//获取键
Set keys = map.keySet();
for (Object key : keys) {
System.out.println(key);
System.out.println(map.get(key));
}
//获取值
Collection values = map.values();
for (Object value : values) {
System.out.println(value);
}
Map接口注意事项:
包含接口Entry<K,V>
在HashMap中使用Node节点实现了Entry“键-值”对
Node节点用next属性实现了单向链表
map底层entry+单向链表,数组+单向链表
当元素节点个数超过8时,转用红黑树进行底层存储
使用map.remove(Object key,Object value)方法进行删除操作时,必须要key和value都匹配时才能删除
map.put(Object key,Object value)在被用作修改时,与map.replace(Object key,Object value)作用基本一致
泛型集合
通过使用泛型我们可以解决以下容易出现的异常问题:
List的get(int index)方法获取元素
Map的get(Object key)方法获取元素
Iterator的next()方法获取元素
泛型的定义:将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性(本质是参数化类型)
泛型集合可以约束集合内的元素类型
典型泛型集合ArrayList、HashMap<K,V>
、<K,V>表示该泛型集合中的元素类型
泛型集合中的数据不再转换为Object
使用泛型的时候,就可以限定集合输入的类型,从而规定了集合输出的类型
Collections算法类
Java集合框架将针对不同数据结构算法的实现都保存在工具类中
Collections类定义了一系列用于操作集合的静态方法
Collections和Collection不同,前者是集合的操作类,后者是集合接口
Collections提供的常用静态方法:
sort():排序
binarySearch():查找(使用二分法进行查找,前提是已经排好序)
max()\min():查找最大\最小值
Collections 排序
Collections类可以对集合进行排序、查找和替换操作
实现一个类的对象之间比较大小,该类要实现Comparable接口
重写**compareTo()**方法
降序和升序的操作如下代码:
public class Student implements Comparable<Student>{
public int id;
private String name;
private String sex;
public Student(int id,String name, String sex) {
this.id=id;
this.name = name;
this.sex = sex;
}
@Override
public int compareTo(Student o) {
// return this.id-o.id;//升序
return o.id-this.id;//降序
}
}