目录
集合的概念
集合:实际上是一个容器,可以用来容纳其它类型的数据,一次容纳多个对象
注意:
(1)集合不能直接存储基本数据类型,也不能直接存储 java 对象
(2)集合中存储的是 java 对象的内存地址
(3)集合本身是一个容器,一个对象,所以集合存储的都是“引用”
(4)java中每一个不同的集合,底层会对应不同的数据结构(数组,二叉树,链表,哈希表等)
(5)所有的集合类和集合接口都在 Java.util.* 下
集合继承结构
集合总框架:
简化常用框架:
集合分为两大类:
(1)以单个方式存储元素——>父类:java.util.Collection
(2)以键值对方式存储——>父类:java.util.Map
说明:
接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap
算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现
常用实现类总结
实现类 底层 ArrayList 数组 LinkedList 双向链表 Vector 数组(线程安全,但效率低) HashSet HashMap(存放在HashSet中的元素等同于存放在HashMap中的key部分) TreeSet TreeMap(存放在TreeSet中的元素等同于存放在TreeMap中的key部分) HashMap 哈希表 Hashtable 哈希表(线程安全,但效率低) Properties 线程安全,但key 和 value 只能存储字符串String Treemap 二叉树,且集合中的key可以按照大小自动排序
Set 和 List 的区别
(1) List 集合存储元素特点:存取有序可重复,且有下标(从0开始)
Set 集合存储元素特点:无需不可重复,且无下标
(2)Set 检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
(3)List 和数组类似,可以动态增长,根据实际存储的数据的长度自动增长 List 的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变
<实现类有ArrayList,LinkedList,Vector>
Collection常用方法
方法 描述 boolean add(E e) 向集合中添加元素e boolean addAll(Collection c) 把集合c中所有元素都添加到当前集合中 viod clear() 清空当前集合中所有的元素 boolean contains(Object o) 在当前集合中判断是否包含元素o在当前集合中判断是否包含元素o boolean containsAll(Collection c) 判断当前集合是否包含集合c中的所有元素 boolean isEmpty() 判断集合是否为空 iterator iterator() 返回当前集合的迭代器 boolean remove(Object o) 从当前集合中删除第一个与o匹配的元素 boolean removeAll(Collection c) 在当前集合中删除在c集合中出现的所有元素 int size() 返回集合中元素的个数 Object[] toArray() 把集合转换为数组
集合迭代iterator()
迭代器的作用:拥有迭代器的集合,遍历时不需要知道集合内部实现,迭代器统一了遍历方法,不同集合各自遍历方法可能不同,而迭代器则在上层提供了一个统一的抽象,只需要掌握一种迭代器使用就能操作多种不同类型的集合
注意:除了Map之外,适用于所有集合
迭代器对象的两个方法:
方法 描述 boolean hasNext() 获得序列中的下一个元素 Object next() 检查序列中是否还有元素 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class 迭代 { public static void main(String[] args) { //创建对象 Collection num = new ArrayList(); //添加元素(自动装箱) num.add(1); //整形 num.add("java") ; //字符串 num.add(new Object()) ; //对象 //创建迭代器对象 Iterator it = num.iterator() ; //循环 while(it.hasNext()){ Object obj = it.next(); System.out.println(obj); } } }
结果图: