java的集合框架学习笔记

时间:2023-02-26 08:23:56

数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法。 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework)。 Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了,这样就大大提高了编程效率。

1.java.util包中提供了一些集合类,这些集合类又成为容器。提到容器不难想到数组,集合类与数组的不同之处是,数组的长度是固定的,容器的长度是可变的;数组用来存放基本类型的数据,集合用来存放对象的引用。常用的集合类有List集合,Set集合和Map集合。其中List集合和Set集合继承了Collection接口,各接口还提供了不同的实现类。

2. 先说Set和List:

2.1. Set子接口:无序,不允许重复。List子接口:有序,可以有重复元素。具体区别是

Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。<对应类有 HashSet,TreeSet>

List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。<相应类有 ArrayList,LinkedList,Vector>

Set和List具体子类:

2.2. <实例比较>

HashSet:以哈希表的形式存放元素,插入删除速度很快。

ArrayList:动态数组,LinkedList:链表、队列、堆栈。

Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。

3.Collection接口:

Collection接口是层次结构中的根接口。构成Collection的单位称为元素。Collection接口通常不能直接使用,但该接口提供了添加元素,删除元素,管理数据的方法。由于List接口与Set接口都继承了Collection接口,因此这些方法对List集合与Set集合是通用的。遍历集合,通过使用迭代器实现。Collection接口中的iterator()方法可返回在此Collection进行迭代的迭代器。

3.List集合

List集合包括List接口以及List接口的所有的实现类。List集合中的元素允许重复,各元素的顺序就是对象插入的顺序。类似java数组,用户可通过使用索引(元素在集合中的位置)来访问集合中的元素。

List接口继承了Collection接口中的所有方法,同时它自己也实现了两个重要的方法:get(int index),set(int index,Object obj)。

List接口常用实现类有ArrayList类与LinkedList类。

ArrayList类实现了可变的数组,适合用于按位置查找

LinkedList类采用链表结构保存对象,适合用于添加删除元素

4.Set集合

Set集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但Set集合中不能包含重复对象。Set集合由Set接口和Set接口的实现类组成。Set接口继承了Collection接口,因此包含Collection接口的所有方法。

Set集合常用实现类有HashSet类和TreeSet类。

HashSet类中大部分操作都是O(1)

TreeSet类大部分操作都是O(log(n)),但是有序,实现了SortedSet

5.Map集合

Map集合没有继承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key,每个key只能映射到一个value。key还决定了存储对象在映射中的存储位置,但不是有key对象本身决定的,而是通过一种“散射技术”进行处理,产生了一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口的所有实现类。

Map接口常用的实现类有HashMap和TreeMap。建议使用HashMap类实现Map集合,因为由HashMap类实现的Map集合添加和删除映射关系效率更高。

HashMap类是基于哈希表的Map接口的唯一性。

TreeMap类不仅实现了Map接口,还实现了SortedMap接口。