1.泛型(本质就是数据类型的参数化)
<1.>作用:
Ⅰ.代码可读性更好(不要强制转换);
Ⅱ.程序更加安全;
<2.>要点:
Ⅰ.把类型当作是参数一样传递;
Ⅱ.<数据类型>只能是引用类型;
<3.>定义泛型
泛型标记 | 对应单词 | 说明 |
E | Element | 用于容器,表示容器中的元素 |
T | Type | 普通的Java类 |
K | Key | 表示键,比如Map中的Key |
V | Value | 表示值 |
N | Number | 表示数值类型 |
? | 不确定的Java类型 |
<4.>泛型类
定义:public class Generic<T>{}
使用:Generic<String> generic = new Generic<>();
<5.>泛型接口
定义:public interface Igeneric<T>{}
<6.>泛型方法
定义:public <T> void setName(T name){}
public <T> T getName(T name){}
<7.>静态方法(无法访问类上定义的泛型)
定义:public static <T> void setFlag(T flag){}
public static <T> T getFlag(T flag){}
<8.>泛型方法与可变参数(泛型方法中,泛型也可以定义可变参数类型)
定义:public <T> void method (T...args){}
<9.>通配符与上下限定(“?”表示通配符)
定义:public void showFlag(Generic<?> generic){}
上限限定:(<Generic ? extends Number>)
下限限定:不适用于泛型
<10.>总结
Ⅰ.基本类型不能用于泛型;
Ⅱ.不能通过类型参数创建对象;
2.容器
<1.>结构图
Collection接口 | ||||
extends | extends | extends | extends | |
List接口(有序,可重复) (动态数组) | Set接口(无序,不可重复) (集合) | Map接口 (函数) | ||
interface | interface | interface | interface | interface |
ArrayList类 | LingkedList类 | HashSet类 | LingkedHashSet类 | HashMap类 |
<2.>单例集合(将数据一个一个的进行存储)和双例集合(键值对)
<3.>ArrayList容器类(数组)
Ⅰ.特点:底层是用数组实现的存储,查询效率高,增删效率低,线程不安全;
Ⅱ.实例化容器
List<String> list = new ArrayList<>();
增加元素 | list.add("abc") |
删除元素 | list.remove(1) |
修改元素 | list.set(0,"ad") |
查询元素 | list.get(2) |
注:更多方法参照jdk
<4.>LinkedList容器类(双向链表)
Ⅰ.实例化容器
List<String> list = new LinkedList<>();
注:方法参照jdk
<5.>HashSet容器类(集合)
Ⅰ.特点:HashSet允许有null元素,查询和删除效率都比较高,线程不安全
Ⅱ.实例化容器
Set<String> set = new HashSet<>()
注:方法参照jdk
<6.>HashMap容器类
Ⅰ.特点:查找、删除、修改方面都有非常高的效率
结构:jdk8以前:数组+链表;jdk8以后:数组+链表+红黑树,(在链表节点大于8 之后转化成红黑树,小于6转化为链表);
Ⅱ.实例化容器
Map<String,String> map = new HashMap<>();
Ⅲ.数组初始化
HashMap对于数组的初始化采用延迟初始化方式,通过resize方法实现初始化处 理。resize方法既实现数组初始化,也实现数组扩容处理;
<7.>迭代器(Iterator)(游标)
方法:hasNext()当前位置是否有元素,
next()获取当前元素,并指向下一元素,
remove()删除当前位置的元素;
Ⅰ.使用Iterator迭代List和Set接口容器
①获取迭代器对象:Iterator<String> iterator = list.iterator();
②while循环
while(iterator.hasNext()){
String value = iterator.next();
System.out.println(value);
}
③.for循环
for(Iterator<String> it = list.iterator();it.hasNext;){
String value = it.next();
System.out.println(value);
}
<8.> Collections工具类(提供了Set、List、Map接口的辅助方法,该类中所有方法为静态方法)
方法 | 描述 |
sort() | 对list容器升序排序 |
shuffle() | 对list容器随机排序 |
reverse() | 对liat容器进行逆序排序 |
fill(list,object) | 用一个特定的对象重写整个list容器 |
binarySearch(list,object) | 折半查找特定对象 |