一、集合
集合分为两种集合,一种是单列集合(Collection),另外一种是双列集合(Map)。1.单列集合:单列集合Collection简单继承关系:
首先我们从左向右看:
List集合:有存储顺序,可以重复。
ArrayList集合:ArrayList集合底层是数组实现的。特点:查询快,增删慢,线程不安全。
LinkedList集合:LinkedList集合底层是链表结构的。特点:查询慢,增删快,线程不安全。
Vector集合:Vector集合底层也是数组实现。特点:查询、增删都慢,但是线程安全。
List集合常用方法总结:boolean add(E e):将指定元素添加到集合的尾部。void add(int index,E element):将指定的元素插入集合中的指定位置。boolean addAll(Collection<? extends E> c):将Collection集合中的所有元素添加到集合的尾部。void clear():移出集合中的所有元素。boolean contains(Object o):判断集合中是否包含指定元素,判断根据equals方法进行判断。E get(int index):获取集合中指定位置的元素。E remove(int index):移除集合中的指定位置的元素。int size():获取集合中元素的个数。Object[] toArray():将集合转换成数组。
Set集合:无存储顺序,不可重复。
HashSet集合:底层是哈希表实现的,存储速度快,线程不安全。
当向HashSet中添加一个元素时,会先使用元素的hashCode方法和之前的元素进行判断hashCode值是否相等,若不相等,添加进去,若相等,则再使用equals方法和之前的元素进行判断,所相等不添加,若不相等则添加进集合。
LinkedHashSet集合:底层是链表结构。线程不安全。
TreeSet集合:默认会对集合中元素进行自然排序,由于需要排序 性能和HashSet相比较差。
2.双列集合:Map集合。
Map集合继承结构:
Map集合也称为键值对集合,其中维护了键和值,我们可以通过键来找到指定的值,其中键不可以重复,值可以重复。
HashMap集合:线程不安全,存取速度快,底层是哈希表实现。键和值都可以存储null值。
TreeMap集合:线程不安全,底层是红黑树(二叉树),它会自动对键进行排序。
HashTable集合:线程安全,底层是哈希表,键和值都不可以为null值。
二、泛型
首先来谈谈泛型的好处:将运行时异常提升到了编译期,明确了数据的类型不用做强制类型转换,
泛型的几种书写格式:前后泛型一定要一致,如前面写了泛型后面可以不用写,或者后面写了前面可以不用写。
ArrayList<String> list1 = new ArrayList<>();//true
ArrayList list2 = new ArrayList<String>();//true
//注意这种是错误的
//ArrayList<> list2 = new ArrayList<String>();
//ArrayList<String> list3 = new ArrayList<Object>();//false
//ArrayList<Object> list4 = new ArrayList<String>();//false
泛型方法的定义:
//定义一个参数类型和返回值类型相同的泛型方法
public <T> T methodName(T t){
return t;
}
泛型类的定义:在类上定义了泛型,在类中就可以使用泛型。
class 类名<自定义的泛型>{
}
class Person<T>{
}
泛型接口的定义:和泛型类相似。
interface 接口名 <自定义的泛型>{
}
interface MyInter<T>{
}
注意事项:泛型是在new对象的时候才生效的。