Collection体系(集合类,它是一个接口):
两个子类:
List、Set(这两个子类也是接口)
List有两个经常使用子类:(值,不惟一,容许有重复的元素,都是有序的)
ArrayList:
数组结构,查找快,增删慢。线程不安全。
LinkedList:
有序,链表结构,查找慢,增删快。线程不安全。
Vector:(以过期)
有序,数组结构,查找增删都慢。线程安全。
Set:有三个经常使用子类(值,惟一,不容许有重复的元素)
HashSet:
底层是哈希表结构,无序。
如何保证惟一性的?
由HashCode和equals方法保证惟一性的。
顺序:
先判断HashCode方法
相同:判断equals方法,相同:不添加。不相同:添加
不相同:添加
LinkedHashSet:
有序,底层是链表加哈希表结构,由链表保证有序,哈希表保证惟一。
TreeSet:
底层是二叉树结构,有必定的天然排序算法。
是如何保证元素的惟一性的?
根据返回值是不是0判断是否重复。而且还要保证元素有序:
根据返回值是正数仍是负数。
实现方案:添加比较器
元素具有比较器:实现Comparable接口,重写CompareTo方法。
集合具有比较器:实现Comparator接口,重写Compare方法。
List和Set集合遍历的几种方式:
Set集合是没有普通for的遍历方式
普通for、加强for、迭代器
普通for格式:
for(int i = 0; i < list.size(); i++){}
加强for格式:
for(类型 变量名 : 集合名){}
迭代器格式:(提供了两个方法:hasNext和next方法)
Iterator<类型> it = 集合名.iterator();
何时使用?
须要操做集合的角标的时候使用普通for
只须要遍历集合的时候使用加强for或迭代器。
泛型:
泛型的通配符为:?
<? extends T> 向下限制,只能够传递T类型或T类型的子类
<? super T> 向上限制,只能够传递T类型或T类型的父类
泛型的定义:定义泛型能够在类中预支地使用未知的类型。可定义在类、方法或接口上。
泛型的使用:通常在建立对象时,将未知的类型肯定具体的类型。当没有指定泛型时,默认类型为Object类型。
泛型的好处:
将运行时期的ClassCastException,转移到了编译时期变成了编译失败。
避免了类型强转的麻烦。
泛型的格式:
类上:
修饰符 class 类名<表明泛型的变量> { }
使用格式:
使用格式:建立对象时,肯定泛型的类型
接口上:
interface 类名<表明泛型的变量>{ }
使用格式:
一、定义类时肯定泛型的类型
二、始终不肯定泛型的类型,直到建立对象时,肯定泛型的类型
方法上:
修饰符<> 返回值类型 方法名(泛型变量 变量名){}
使用格式:
使用格式:调用方法时,肯定泛型的类型