一.集合
1、数组和集合的区别
1.相同点:
都是可以存储多个数据的容器
2.不同点:
1)数组的长度是不可变的,集合的长度是可变的。
2)数组可以存基本数据类型和引用数据类型,而集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类。
2、集合概述和使用
1)集合概述
-
是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
-
JDK 不提供此接口的任何直接实现.它提供更具体的子接口(如Set和List)实现
2)创建集合的对象
-
多态的方式
-
具体的实现类ArrayList
3)集合常用方法
方法名 | 说明 |
boolean add(E e) | 添加元素 |
boolean remove(Object o) | 从集合中移除指定的元素 |
boolean removeIf(Object o) | 根据条件进行移除 |
void clear() | 清空集合中的元素 |
boolean contains(Object o) | 判断集合中是否存在指定的元素 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中元素的个数 |
3.集合的遍历
1)迭代器
集合的专用遍历方式, 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到。
Iterator<E> iterator();
2)Iterator中的常用方法
//判断当前位置是否有元素可以被取出
boolean hasNext();
//获取当前位置的元素,将迭代器对象移向下一个索引位置
E next();
3)集合的遍历实例
public static void main(String[] args) {
//创建集合对象
Collection<String> c = new ArrayList<>();
//添加元素
c.add("hello");
c.add("world");
c.add("java");
//返回此集合中元素的迭代器,通过集合的iterator()方法得到
Iterator<String> it = c.iterator();
//用while循环改进元素的判断和获取
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
}
4)迭代器中删除的方法
1)删除迭代器对象当前指向的元素
void remove();
2)实例:
public static void main(String[] args) {
//创建集合对象
ArrayList<String> list = new ArrayList<>();
//添加元素
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
//返回此集合中元素的迭代器
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();
if("b".equals(s)){
//指向谁,那么此时就删除谁.
it.remove();
}
}
System.out.println(list);
}
二、泛型
1.什么是泛型方法
泛型方法可以将其类型参数用作其返回值的类型或者其某个形参的类型。
2.泛型方法
1)定义格式
修饰符 <类型> 返回值类型 方法名(类型 变量名) { }
2)示例代码
public class Generic {
public <T> void show(T a) {
System.out.println(a);
}
}
3.泛型接口
1)定义格式
修饰符 interface 接口名<类型> { }
2)示例代码
public interface Generic<T> {
void show(T t);
}
3)泛型接口实现类1
定义实现类时,定义和接口相同泛型,创建实现类对象时明确泛型的具体类型 。
public class GenericImpl1<T> implements Generic<T> {
@Override
public void show(T t) {
System.out.println(t);
}
}
4)泛型接口实现类2
定义实现类时,直接明确泛型的具体类型
public class GenericImpl2 implements Generic<Integer>{
@Override
public void show(Integer t) {
System.out.println(t);
}
}
4.类型通配符
1)类型通配符:
<?>: 表示元素类型未知的ArrayList,它的元素可以匹配任何的类型,但是并不能把元素添加到ArrayList中了,获取出来的也是父类类型。
ArrayList<?>;
2)类型通配符上限:
<? extends 类型>:它表示的类型是Number或者其子类型。
ArrayListList <? extends Number>;
3)类型通配符下限:
<? super 类型>: 它表示的类型是Number或者其父类型。
ArrayListList <? super Number>;