Map
键值对形式,两个类型可以不一样
-put(k,v)不存在就直接添加,否则更新替换,并返回替换前的值
-remove(k)移除指定键的值,不存在返回null,存在就返回被移除的值
-get(k)
-keySet()获得key的set集合
-entrySet()获得键值对形式的set集合Set<Map.Entry<k,v>> Entry是为了方便同时获取k,v
-containsKey()是否包含某个键
-getOrDefault(k,0)k存在则返回对应值,否则返回默认值
Hashmap
底层是hash表结构,为了保证键的唯一,重写hashcode和equals,尤其是自定义值最为key
为什么重写:因为object中的equals比较的是地址,equals为true,则hashcode必须为true,反之一样
Linkedhashmap
Hash表加链表,hash保证键的唯一,而链表保证有序
Treemap
底层是红黑树,无序,但key是必须按照默认按照自然排序或自定义排序一种
自然排序:元素自身具备比较性,对象实现Compareable接口,覆盖其CompareTo方法
自定义:不具备或者不是想要的,实现comparator接口,复写compare方法
Of集合
Jdk9新特性
List list = List.of(1, 2, 3, 4, 5, 6, 7);
Map<Integer, String> map = Map.of(1, “张三”, 2, “李四”, 3, “王五”);
迭代器Iterator
用于遍历单列集合collection,且不能进行修改操作
-next()返回下一个元素
-hasNext()是否有下个元素
增强for
底层就是iterator,每个遍历的值都是集合对象的复制,所以修改没用,但会对象类型有用,基本类型没用
泛型
一种类型规范,统一存储,集合定泛型只是为了便于统一管理;
一种安全机制,将运行时的异常提前到编译时,而且java中的泛型时伪泛型,只存在于编译,运行时就被消除
不具备继承关系
泛型类
class ArrayList {//里面的方法随着类的的泛型而动,比较灵活
public boolean add(Integer e) { }
public Integer get(Integer index) { }
…
}
泛型方法
public void show(MVP mvp) {//方法参数通用,就在返回之类型前加此类型
System.out.println(mvp.getClass());
}
泛型接口
类实现接口,可以指定泛型,如果不指定,那么这个类就是泛型类
interface Ai{
// public abstract
void show(W w);
}
class Bi implements Ai{
@Override
public void show(String s) {
}
}
class Ci implements Ai{
@Override
public void show(W w) {
}
受限泛型
上限<? Extends 类>该类或子类
下限<? Super 类>该类或父类
可变参数
Jdk1.5之后,方法可以就收多个类型一致的数据,也可以直接传入一个数组,其实就是一数组接收的,如果和其它类型数据在一起,就必须放在后面
public int getMax(int… items)