泛型,集合
Java 泛型
定义:通过类型参数化来提高程序代码重用性
类型参数化:将类,接口或方法所处理数据的类型抽象成参数,这样可以定义出泛型类,泛型接口或泛型方法。
泛型编程
定义:使用java API中的泛型类,泛型接口或泛型方法编程,亦或是编写自己的泛型类
注:限定类型实参,在某个类族或接口族范围内。
例:
GenericSet<T extends Number>//只能是是数值类number或其子类
泛型族
定义:基于同一泛型类为某个类族或接口族中的每个类分别定义出一个具体的类,这些具体类合在一起为泛型族。
例:
泛型类:A<T>
泛型族:A<Number>,A<Byte>,A<Short>,,,
通配符类型的引用变量
三种通配符类型
泛型名<?>
A<?>ref;//引用任何对象
泛型名<? extends 类名>
A<? extends Number>ref;//引用number及其子类
泛型名<? super 类名>
A<? super Integer>ref;//只能引用类integer或其超类
数据集合类
Collection接口
Map接口
Iterator(迭代器)
描述了遍历数据集合时的元素的元素位置信息
Iterable是一个超级接口,被Collection所继承,且只有一个方法 Iterator iterator() //即返回一个迭代器
Collections类
包含各种数据集合算法(静态方法)
具体细节
List 接口
set 接口
Deque接口
Map接口
ArrayList< E>
实现了Collection,可以实现动态数组的功能。
方法一:增强for循环遍历:
for(String attribute : list)
{
System.out.println(attribute);
}
方法二:for循环遍历
for(int i = 0 ; i < list.size() ; i++)
{
system.out.println(list.get(i));
}
方法三:用迭代器迭代:
Iterator it = list.iterator();
while(it.hasNext()) {
System.ou.println(it.next);
}
LinkedList< E>
实现集合接口Collection,Deque
使用双端队列类可实现队列和堆栈的功能。
队列:先进先出
offer()//队尾添加元素
poll()//取出并删除队列头元素
堆栈:后进先出
push()//向堆栈中压入一个元素
pop()//从堆栈中弹出一个元素
HashSet< E>
实现了集合接口Collection
特点:
集合中数据元素是无序的
集合中数据元素不能重复(用equals判断)
不能使用普通for语句遍历
TreeSet< E>
HashMap< E>
实现了映射接口Map<K,V>
特点:
数据元素是无序的
数据元素的键不能重复
映射没有迭代器,其中元素没有序号。(如需遍历,将键转为集合,再按集合遍历)
TreeMap
Collections 集合工具类
线程安全:
注意
ArrayList 扩容是50%,vector 是加倍
vector 线程安全
HashSet 是由 HashMap 实现的
HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类
HashMap的key-value支持key-value,null-null,key-null,null-value四种
Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1
HashMap默认的初始化大小为16,之后每次扩充,容量变为原来的2倍
Hashtable已经被弃用的一个类,性能比较低
HashMap和HashTable都使用哈希表来存储键值对