一.泛型
1.泛型介绍
泛型是Java 5引进的新特征,是类和接口的一种扩展机制,主要实现参数化类型机制。暂行被广泛应用在Java集合API中,在Java集合框架中大多数的类和接口都是泛型类型。使用泛型,程序员可以编写更安全的程序。
①泛型类型
简单的说,泛型是带一个或多个类型参数的类或接口。泛型类型的使用与方法调用类似方法调用需向方法传递参数,使用泛型需传递一个类型参数,即用某个具体的类型替代。
②泛型方法
泛型方法是带类型参数的方法,类的成员方法和构造方法都可以定义为泛型方法,泛型方法的定义与泛型类型的定义类似,但类型参数的作用域仅限于声明的方法和构造方法内。泛型方法可以定义为静态的和非静态的。
③通配符(?)的使用
由于String是Object的子类,但List <String>与List <Object>却没有关系,前者并不是后者的子类,要一个List <String>对象传给List <Object>需要将其参数修改为List <?>,这就是通配符(?)的使用。
④有界类型参数
有件类型分为上界和下界,上界用extens指定,下界用super指定。
⑤类型擦除
当实例化泛型类型时,编译器使用一种叫类型擦除的技术转换这些类型。在编译时,编译器将清除类和方法中所有与类行参数有关的信息。类型擦除可以让使用泛型的Java应用程序与之前不使用泛型类型的Java类库和应用程序兼容。
2.集合框架
①Collection
❶Set接口
❷List接口
❸Queue接口
②Map
SortedMap
3.List接口及实现类
List接口除继承Collection的方法外,还定义了一些自己的方法。
①ArrayList
ArrayList是最常用的线性表现类型,通过数组实现的集合对象。
②遍历集合元素
在使用集合时,遍历集合元素是最常见的任务。遍历集合中的元素有多种方法:用简单的for 循环、用增强的for循环和用Iterator迭代器对象。
❶使用简单的for循环
使用简单的for循环可以遍历集合中的每个元素。
for(int i= 0;i<bigCities.size();i++){
System.out.print(bigcities.get(i)+"");
}
❷使用增强的for 循环
使用增强的for 循环不但可以遍历数组的每个元素,还可以遍历集合中的每个元素。下面的代码打印集合的每个元素:
for (String city : bigcities)
System.out.println(city);
❸使用迭代器
迭代器是一个可以遍历集合中每个元素的对象。调用集合对象的iterator()方法可以得到Iterator对象,再调用Iterator对象的方法就可以遍历集合中的每个元素。
④数组转化为List对象
java.util.Arrays类提供了一个asList()方法,实现将数组转换成List对象的功能,该方法的定义如下:
public static <T> List<T> asList(T…a)
该方法提供了一个从多个元素创建List 对象的途径,它的功能与Collection 接口的toArray()方法相反。
String[ ] str= ("one","two","three","four"};
List<String> list =Arrays.asList(str);//将数组转换为列表
System.out.println(list);
4.Set接口及实现类
❶HashSet类
HashSet利用散列方法储存元素,具有良好的存取性能,但元素没有顺序。
❷用Set对象实现集合运算
❸TreeSet类
5.Queue接口及实现类
①Queue接口和Deque接口
Queue接口除了提供Collection的操作外,还提供了插入、删除和检查操作。
Deque接口还定义了removeFirstOccurence()和removeLastOccurence()方法,分别用于删除第一次出现的元素和删除最后出现的元素。
②ArrayDeque类和LinkedList类
Deque的常用实现类包括 ArrayDeque 类和LinkedList类,前者是可变数组的实现;后者是线性表的实现。LinkedList 类比 ArrayDeque类更灵活,实现了线性表的所有操作,其中可以存储null元素,但ArrayDeque 对象不能存储null。
可以使用增强的for 循环和迭代器访问Deque的元素。
ArrayDeque<String> aDeque = new ArrayDeque<String>();
for (String str : aDeque) {
System.out.println(str);
}
使用迭代器访问Deque元素代码如下:
ArrayDeque<String> aDeque = new ArrayDeque<String>();
for (Iterator<String> iter = aDeque.iterator(); iter.hasNext();){
System.out.println(iter.next());
}
③集合转换
集合实现类的构造方法一般都接受一个Collection对象,可以将Collection转化成不同类型的集合。下面是一些实现类的构造方法:
public ArrayList(Collection c)
public HashSet(Collection c)
public LinkedList(Collectionfc)
下面代码将一个Queue对象转换成一个List:
Queue<String> queue = new LinkedList<>();
queue.add("hello");
queue.add("world");
List<String> mylist = new ArrayList(queue);
以下代码又可以将一个List 对象转换成Set对象:
Set<String> set = new HashSet (myList);
6.Map接口及实现类
①Map接口
❶HasMap
❷Hastable
❸TreeMap