Java18-java语法基础——集合框架
一、什么是集合框架
1、集合框架:是为表示和操作集合而规定的一种统一的、标准的体系结构。
2、任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
(1)接口:即表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。
(2)实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。
(3)算法:在一个实现了某个集合框架中的接口的对象上,完成某种有用的计算的方法,例如查找、排序等。
二、集合框架的好处
1、提高程序设计效率。
2、提高程序速度和质量。集合框架通过提供对有用的数据结构和算法的高性能和高质量的实现使你的程序速度和质量得到提高。
3、集合框架鼓励软件的复用。对于遵照标准集合框架接口的新的数据结构是可复用的。
三、Java集合框架包含的内容
接口 |
collection |
Map |
||||
List |
set |
|
|
|||
接口特点 |
元素可以重复,有序的(插入顺序有序),长度可变 |
元素不可以重复,无序的 |
无序的,以key-value的方式存放数据 |
|||
具体类 |
ArrayList |
LinkedList |
HashSet |
TreeSet |
HashMap |
TreeMap |
|
动态数组,底层由数组实现 |
动态链表,底层由链表实现 |
|
|
|
|
优缺点 |
遍历和随机访问效率高 |
插入删除效率高 |
|
|
|
|
常用方法 |
|
|
|
|
1)put(key,value) 2)keySet() 3)values() |
|
算法 |
1、Collections提供了对集合进行排序、遍历等多种算法实现; 2、Java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们位于java.util包中; 3、我们不必再重新发明轮子,只需学会如何使用它们,就可处理实际应用中问题。 |
四、List接口的实现类:ArrayList、LinkedList
1、ArrayList类
(1)定义:
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
(2)常用方法(继承List接口)
方法名 |
说 明 |
boolean add(Object o) |
在列表的末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) |
在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 |
int size() |
返回列表中的元素个数 |
Object get(int index) |
返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) |
判断列表中是否存在指定元素 |
boolean remove(Object o) |
从列表中删除元素 |
Object remove(int index) |
从列表中删除指定位置元素,起始索引位置从0开始 |
2、LinkedList类
(1)定义:LinkedList采用链表存储方式。插入、删除元素时效率比较高。
(2)LinkedList集合类的特殊方法
方法名 |
说 明 |
void addFirst(Object o) |
在列表的首部添加元素 |
void addLast(Object o) |
在列表的末尾添加元素 |
Object getFirst() |
返回列表中的第一个元素 |
Object getLast() |
返回列表中的最后一个元素 |
Object removeFirst() |
删除并返回列表中的第一个元素 |
Object removeLast() |
删除并返回列表中的最后一个元素 |
五、Map接口
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作。
最常用的是HashMap。
实现类HashMap
(1)定义:
Map countries = new HashMap();
(2)常用方法:
方法名 |
说 明 |
Object put(Object key, Object val) |
以“键-值对”的方式进行存储 |
Object get (Object key) |
根据键返回相关联的值,如果不存在指定的键,返回null |
Object remove (Object key) |
删除由指定的键映射的“键-值对” |
int size() |
返回元素个数 |
Set keySet () |
返回键的集合 |
Collection values () |
返回值的集合 |
boolean containsKey (Object key) |
如果存在由指定的键映射的“键-值对”,返回true |
六、集合类对比
1、Vector和ArrayList的异同
实现原理相同,功能相同,很多情况下可以互用
两者的主要区别如下:
(1)Vector线程安全,ArrayList重速度轻安全,线程非安全;
(2)长度需增长时,Vector默认增长一倍,ArrayList增长50%。
2、Hashtable和HashMap的异同
实现原理相同,功能相同,在很多情况下可以互用
两者的主要区别如下:
(1)Hashtable继承Dictionary类,HashMap实现Map接口
(2)Hashtable线程安全,HashMap线程非安全
(3)Hashtable不允许null值,HashMap允许null值
七、迭代器:遍历List集合
方法1:通过for循环和get()方法配合实现遍历
方法2:通过迭代器Iterator实现遍历
所有集合接口和类都没有提供相应遍历方法,而是由Iterator实现集合遍历;
Collection 接口的iterate()方法返回一个Iterator,然后通过Iterator接口的两个方法可实现遍历;
迭代器的两个方法:
boolean hasNext(): 判断是否存在另一个可访问的元素
Object next(): 返回要访问的下一个元素
示例:
//定义Student对象stu的迭代器it Iterator<Student> it = stu.iterator(); while(it.hasNext()){ //判断迭代器中是否还有下一个元素 Student temp = it.next(); //获取下一个元素 System.out.println(temp); //输出 }
八、泛型集合