泛型的介绍:
泛型是Java 5引进的新特征,是类和接口的一种扩展机制,主要实现参数化类型机制。暂行被广泛应用在Java集合API中,在Java集合框架中大多数的类和接口都是泛型类型。使用泛型,程序员可以编写更安全的程序。
泛型类型
简单的说,泛型(generies)是带一个或多个类型参数(type parameter)的类或接口。
泛型的方法:
你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。
下面是定义泛型方法的规则:
1.所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的 <E>)。
2.每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
3.类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
4.泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等)。
泛型标记符:
E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的 java 类型
集合框架
1.collection:Set 接口,List接口 ,Queue接口
2.Map:sortedMap
集合的定义:
集合是指集中存放一组对象的一个对象。集合相当于一个容器,提供了保存、获取和操作其他元素的方法。集合能够帮助Java程序员轻松地管理对象。Java集合框架由两种类型构成,一个是Collection;另一个是Map。Collection对象用于存放一组对象,Map对象用于存放一组“关键字/值”的对象。
基本操作:
实现基本操作的方法有添加元素,删除指定元素,返回集合中元素的个数,返回集合的迭代器对象。
1.boolean add(E e) : 向集合中添加元素e。
2.boolean remove(Object o) : 从集合中删除指定的元素o。
3.boolean contains(Object o) : 返回集合中是否包含指定的元素o。
4.boolean isEmpty() : 返回集合是否为空,即不包含元素。
5.int size() : 返回集合中包含的元素个数。
6.Iterator iterator() : 返回包含所有元素的迭代器对象。
7.default void forEach(Consumer<? super T>action) : 从父接口继承的方法,在集合的每个元素上执行指定的操作。
List接口及实现类:
List接口是Collection的子接口,实现一种线性表的数据结构。存放在List中的所有元素都有一个下标(从0开始),可以通过下标访问List中的元素。List中可以包含重复元素。List从Collection接口继承的操作于Collection接口类似,但有的操作有些不同。例如,remove()方法总是从线性表中删除指定首次出现的元素;add()和addAll()方法总是将元素插入到线性表的末尾。
ArrayList : 底层数据结构是数组,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。线程不安全
LinkedList : 底层数据结构是链表。线程不安全,对顺序访问进行了优化,向List中间插入与删除快。随机访问则相对较慢。
Vector: 底层数据结构是数组。线程安全。随机访问快,向List中间插入与删除慢。
ArrayList 是一个数组队列,相当于动态数组。线程不安全。
LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
Vector 是矢量队列,底层是数组。它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。
Set接口及实现类
Set接口是Collection的子接口,Set接口类似于数学上集合的概念,不允许有重复的元素
Set接口没有定义新的方法,只有从Collection上继承的方法
Set的接口有三个常用的实现类:HashSet,TreeSet,LinkedHashSet
TreeSet是一种树集合,使用红黑树为元素排序,添加到TreeSet中的元素必须是可以比较的。相对于Hashset它就只是添加元素,不会进行排序。
Queue接口及实现类
Queue接口中有以下几个常用实现类:
PriorityQueue:非阻塞、非线程安全、无边界,支持优先级队列实现类。
ConcurrentLinkedQueue:非阻塞、线程安全、无边界,基于链接节点的队列实现类。
ArrayBlockingQueue:阻塞、线程安全、有边界,一旦创建容量不可改变实现类。
LinkedBlockingQueue:阻塞、线程安全、可选有边界,一个由链表结构组成的可选有界阻塞队列实现类,如果未指定容量,那么容量将等于Integer.MAX_VALUE。
PriorityBlockingQueue:阻塞、线程安全、无边界,支持优先级排序的无边界阻塞队列实现类。
DelayQueue:阻塞、线程安全、无边界,使用优先级队列实现的无界阻塞队列实现类,只有在延迟期满时才能从中提取元素。
SynchronousQueue:阻塞、线程安全、无数据队列,不存储元素、没有内部容量的阻塞队列实现类。
LinkedBlockingDeque:阻塞、线程安全、无边界,由链表结构组成的可选范围双向阻塞队列实现类,如果未指定容量,那么容量将等于 Integer.MAX_VALUE
Map接口及实现类
Map:双列集合类的根接口,这种接口的实现类专门用于存储一系列键值对。在 Map 实现类中,key 不允许重复,而 value 不做要求。
常用的方法:
public V put(K key, V value):把指定的键与指定的值添加到Map集合中。
public V remove(Object key):把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
public V get(Object key):根据指定的键,在Map集合中获取对应的值。
boolean containsKey(Object key):判断集合中是否包含指定的键。
public Set<K> keySet():获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet():获取到Map集合中所有的键值对对象的集合(Set集合)。
Map接口的常用实现类:Hashmap、TreeMap、Hashtable。
迭代器
Java迭代器(Iterator)是 Java 集合框架中的一种机制,它提供了一种在不暴露集合内部实现的情况下遍历集合元素的方法。
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。
Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。
迭代器 it 的三个基本操作是 next 、hasNext 和 remove。
调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
调用 it.hasNext() 用于检测集合中是否还有元素。
调用 it.remove() 将迭代器返回的元素删除。