1. 为什么使用集合框架
如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,可以使用Java集合框架。
2. Java集合框架包含的内容
Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中。
Collection 接口存储一组不唯一,无序的对象。
List 接口存储一组不唯一,有序(插入顺序)的对象。
Set 接口存储一组唯一,无序的对象。
Map接口存储一组键值对象,提供key到value的映射。
3. List接口的实现类
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
LinkedList采用链表存储方式。插入、删除元素时效率比较高。
4. ArrayList集合类
List接口常用方法:
5. LinkedList集合类
LinkedList的特殊方法:
6. Set接口
Set接口存储一组唯一,无序的对象。
HashSet是Set接口常用的实现类。
Set中存放对象的引用。
7. Map接口
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作。
最常用的实现类是HashMap。
Map接口常用方法:
8. 迭代器Iterator
如何遍历Map集合呢?
方法1:通过迭代器Iterator实现遍历
获取Iterator :Collection 接口的iterator()方法
Iterator的方法
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素
程序如下:
Set keys = dogMap.keySet();
Iterator it = key.iterator();
While(it.hasNext()){
String key = (String)it.next();
Dog dog = (Dog)dogMap.get(key);
System.out.println(key + “\t” + dog.getStrain());
}
方法2:增强for循环
for (元素类型t 元素变量x :数组或集合对象) {
引用了x的java语句
}
9. 泛型集合
泛型是jdk5才引进的,泛型其实指得就是参数化类型,使得代码可以适应多种类型。像容器,List< T >,大量使用了泛型,它的主要目的之一就是用来指定容器要持有什么类型的对象。
//创建ArrayList集合对象并存储狗狗
List <Dog> dogs = new ArrayList<Dog>();
dogs.add(dog1);
… …
//dogs.add("hello");
// 显示第三个元素的信息
Dog dog = dogs.get(2);
//使用foreach遍历dogs对象
for(Dog dog:dogs){
… …
}
10. 泛型接口
泛型接口和泛型类其实并没有什么太大区别,都是持有对象。
public interface Tuple<T>{
T next();
}
11. 泛型方法
泛型方法有一个基本原则,尽量使用泛型方法而不是泛型类。只要能够用泛型方法达到需求,就应该只用泛型方法,这样能使得代码更加清晰。
泛型方法的定义:泛型参数列表置于返回值前,例如 public < T> void f(T t)
public <T> void f(T t){
System.out.println(t.getClass().getSimpleName());
}
12. Collections算法类
java集合框架针对不同数据结构算法的实现都保存在工具类中。
Collections类定义了一系列用于操作集合的静态方法。
Collections和Collection不同,前者是集合的操作类,后者是集合接口。
Collections类常用方法:
sort(); 排序
binarySearch();查找,注:在进行查找之前要进行排序
max()\min();查询最大\最小值
reverse();反转元素顺序