首页 > 代码库 > 集合框架
集合框架
集合框架
在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework)。
Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了,这样就大大提高了编程效率。
两大接口基类 Collection 和 Map
Collection 有两个子接口 分别是:List接口 和 set接口
ArrayList 实现类实现了 List接口
LinkedList 实现类 实现了 List接口
HasSet 实现类 实现了 set 接口
TreeSet 实现类 实现了 set 接口
HashMap 实现类 实现了Map 接口
所以通常说java集合框架共有三大类接口: List 、Set、 Map 、 他们都是集合接口,都可以用来存储很多对象
1.Collection 接口存储一组不唯一(允许重复)、无序的对象
2.Set 接口继承Collection接库,存储一组唯一(不允许重复)、无序的对象
3.List 接口继承Collection接口,存储一组不唯一(允许重复)、有序(以元素插入的次序来放置元素,不会重新排列)的对象
4.Map接口存储一组成对的 键——值 对象,提供 key(键)到 value(值) 映射。Map中的key不要求有序,允许重复。value 同样不要求有序,但允许重复。
5.Iterator接口负责定义访问和遍历元素的接口。
List 接口
实现Lise接口的常用类有 ArrayList 和 LinkedList。他们都可以容纳所有类型的对象,包括null,允许重复,并且都保证元素的存储顺序。
ArrayList集合类
他的优点在于遍历元素和随机访问元素的效率比较高。
ArrayList 对 数组进行了封装,实现了可变长度的数组。ArrayList存储数据的方式和数组相同,都是在内存中分配连续的空间,他的优点在于遍历元素和随机访问元素的效率比较高。
List ××× = new ArrayList();
方法详见 JDK API
LinkedList集合类
插入、删除元素时效率比较高,
LinkedList ××× = new LinkedList();
LinkedList 采用链表存储方式,优点在于插入、删除元素时效率比较高,
他有好多特有的方法。
Set接口
查找效率非常高
Set接口是Collection 接口的另外一个常用子接口, Set接口描述的是一种比较简单的集合,集合中的对象并不按特定的方式排序,并且不能保存重复的对象,也就是说Set接口可以存储一组唯一、无序的对象。 Set接口常用的实现类有 HashSet
HashSet类
Set ××× = new HashSet();
1.集合内的元素时无序排列的
2.HashSet类是线程非安全的
3.允许集合元素值为 null
Map接口
优点是查询指定元素效率高
Map接口存储一组成对的 键 ————值 对象,提供 key(键) 到 value(值) 的映射。Map中的key不要求有序,不允许重复,最常用的实现类是 HashMap他的存储方式是哈希表。
HashMap集合类
Map ××× = new HashMap();
Hashtable 和 HashMap 的异同:
HashTable 继承自 Dictionary类 , HashMap 实现了 Map 接口
HashTable 是线程安全的, 不允许null值 (key 和 value 都不允许)
HashMap重速度、轻安全,是线程非安全的,允许null值(key 和 value 都允许)
迭代器 Iterator
所有的集合接口和类都没有提供相应的遍历方法,而是把遍历交给迭代器 Iterator完成。Iterator为集合而生,专门实现集合的遍历
Collection 接口的 Iterator() 方法 返回一个 Iterator,然后通过 Iterator 接口的两个方法即可方便的实现遍历
Iterator it = ×××.iterator(); //获取 Iterator 对象
1.boolean hasNext(); 判断是否存在另一个可访问的元素
2.Object next(); 返回要访问的下一个元素
增强for循环
for(元素类型 元素变量 : 数组或集合对象){
}
泛型集合
主要的好处还是从集合中取出时不需要强制类型转换,并且把非指定对象放入集合,会出现编译错误。在声明集合时就对这个集合所保存的参数进行控制
遍历时不需要强制类型转换
List <Dog> dogs = new ArrayList<Dog>(); Dog 就是泛型的类型参数, 可以设置多个
List <Dog,String> dogs = new ArrayList<Dog,String>();
集合框架