集合
常用接口
-
Collection接口:保存一个一个对象,无序可重复
- (boolean)add(E):添加对象
- (boolean)contains(E):判断集合中有没有E这个对象
- (boolean)remove(E):从集合中移除对象
- (int)size():返回元素个数
-
set接口 extends Collection :无序(序:添加顺序)不可重复
- HashSet:(基于哈希算法)用hash与equals判断重复
- TreeSet:(基于二叉树)储存元素一致,且能够比较,实现Comparable接口,或者自定义比较接口来比较(优先使用定制排序)
-
list接口 extends Collection :存储有序可重复
void add(int index,E):添加
Object get(int index):获取
Object remove(int index):取出
Object set(int index,Object E):替换- ArrayList:基于数组实现的List集合
- LinkedList:基于链表实现的List集合
-
HashMap集合:(保存键值对)
HashTable 是HashMap的古老版本
Properties是HashTable子类,也是一个map,他其中的键与值都是String
- Object put(key,values):
- Object remove(key,values):
- Object get(key):
-
iterator迭代器:
迭代器获取迭代器之后必须立马使用,中间不要有其他语句,因为在内部会记录集合的修改次数,如果使用时的次数与获取时的次数不统一,就会出现【ConcurrentModificationException】异常
- iterator.hasNext():
- iterator.next():
泛型(generic)
让集合像数组一样指定类型
List<Integer> list = new ArrayList<>();
可以让对象中的某个类型变为指定的类型,本质上属于对象,非静态成员变量,不能参与静态变量与方法
Person<String> p1 = new Person("Jason","String");
Person<Integer> p2 = new Person("Tom",30);
泛型涉及到类继承时:子类会默认忽略父类的泛型信息,需要手动指定泛型类型,否则子类的泛型类型即为Object
class stu extends Person{} //子类中的泛型是Object
class stu extends Person<int>{} //子类中的泛型是int
class stu<E> extends Person<E>{} //子类中的泛型继承父类的泛型,即new父类的时候,泛型声明是什么类型,子类泛型就是什么格式
泛型涉及到方法时,再方法中声明中也可以使用泛型,泛型加在返回值类型之前,泛型方法中的类型时依靠方法调用时传入的值指定的类型来确定,
如果传入的参数为null或者没有设定换传入的形参格式,那么此方法的返回值类型为Object
public static xxx test01(){ }
泛型不能多态
通配符
如果在集合中使用到了通配符,那么这个集合不能再存入任何数据,只能取不能存,但唯一可以添加的数据为 NULL ,
//不能添加,
//获取元素类型未知 ,只能为Object
List<?> listN = list; Object o = listN.get(0);
? super 与 ? extends
下界通配符 与 上界同配符
//存放Number及其未知父类,无论添加任何元素都被父类兼容
//获取元素为Object类型
List<? super Number> list = new Array<Number>();
//存放Number及其未知子类,不能添加任何元素(非NULL)
//获取元素number类型
List<? extends Number> list = new Array<Number>();