Collections

集合并非必须指定泛型,但。。。确实应该指定。
注意
1 add和addall,addall可以把一个集合中的所有元素放到另一个集合中去。
2 用contains判断之前要看看自定义类型的equals弄好了没有。
3 retainAll是求交集。如果当前集合发生改变返回true。交集保存在当前集合里。
4 toArray返回值是Object[]
5 迭代器遍历过程中不能同时再调用集合的删除方法
6 普通的remove方***改变size。解决这个问题有很多方法,比如正着删,删一个i自减一次。也可以倒着。

List

List是接口,常用的实现类是ArrayList, LinkedList, Stack 和 Queue
分别是数组 链表 栈 队列。刷Oj基本都能用到。

List有sublist方法,获得一个子list。但要注意这个子list和大list公用内存空间。

泛型

Java的集合类可以添加Object。Object又是所有类型的父类,也就意味着集合可以放各种类型的数据。但这在使用的时候会很麻烦,你可能需要进行强制类型转换。进行强制类型转换是很容易出错的。
为了避免这种情况,引入了泛型。

自定义泛型类

public class Person<T> {
    private String name;
    private int age;
    private T gender;

    public Person(){}
    public Person(String name, int age, T gender) {
        setName(name);
        setAge(age);
        setGender(gender);
    }
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public T getGender() {
        return gender;
    }

    public void setGender(T gender) {
        this.gender = gender;
    }
}

继承泛型类

//擦除,Person类的泛型为默认的Object
class SubPerson extends Person{}
//擦除,Person类的泛型为String
class SubPerson extends Person<String>{}
//保留父类泛型
class SubPerson<T> extends Person<T>{}
//不仅保留还增加了一个类型E
class SubPerson<T, E> extends Person<T>{}

注意,List<string> 不是 List<object>的子类。</object></string>

泛型方法

//注意static关键字的位置不能随便放。要放在泛型前面。
public static <T1> void logArr(T1[] arr) {
        for (T1 item : arr) {
            System.out.print(item);
            System.out.print(" ");
        }
    }
// public static T void method().......是不行的,这样的方法不是泛型方法,这个方法的类型已经在初始化的时候传入了。

通配符

? <? extends T> <? super T>
使用?通配符就不支持元素添加了。
后两个通配符很好懂。 在想象的时候可以把前者看成继承树的无限远处,后者可以看成Object(我只是指出一种思考方式)

Set

这是真集合。。元素不许重复。底层是用HashMap实现的。没什么难的API。

Map

存储的是键值对。HashMap的key不能重复。

Collections

常用的API有
图片说明