集合-Collection-Map结构图-迭代器使用
一、集合:
- 1、集合:数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。
- 2、集合不能直接存储基本数据类型,也不能直接存储java对象,
- 3、集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用。)
- 4、在java中集合分为两大类 :
- 单个方式存储元素:单个方式存储元素,这一类集合中超级父接口:java.util.Collection
- 键值对的方式存储元素:以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map;
- 5、Collection 集合和Map 集合没有任何关系; 两个不同的集合;Map集合没有迭代器:因为它没有继承Collection;
二、、单个存储方式Collection:
- Collection集合:(Iterator/collection/List 都是集合接口不能 直接new 对象 )以下是Collection常用的部分实现类:new 对象;
- new ArrayList :底层是Object类型数组,初始化容量10,非线程安全,扩容按照原容量1.5倍扩容;
- 元素有下标,元素存储空间连续,检索效率高,随机增删效率低,末尾添加元素效率高
- new LinkedList:底层是双向链表,没有初始化容量;检索效率低,
- 随机增删效率高;检索效率低,链表上的元素在空间存储上内存地址不连续。
- new Vector:底层是数组,线程安全,使用较少,初始化容量10,扩容按照原来 2倍扩容
- new HashSet:底层HashMap,放到HashSet集合中元素,等同于放到HashMap集合的key部分
- new HashSet 实际上底层 new HashMap ;底层是哈希表数据结构,初始化容量16;扩容按照原容量 2倍扩容
- new TreeSet:底层是new TreeMap,放到TreeSet集合中的元素等同于放到TreeMap集合的key部分;底层采用二叉树数据结构
三、键值对存储集合:Map
- Map集合,是Map集合类的接口,不能直接 new 对象;以下是Map集合接口的实现类
- new HashMap:底层是哈希表
- new HashTable:底层是哈希表,线程安全,使用比较少
- Properties:是线程安全的,并且key和value 只能存储字符串String;
- new TreeMap:底层二叉树。TreeMap集合的key可以自动按照大小顺序排序
四、List集合和Map集合的特点:
- 1、List集合接口 存储元素特点:有序可重复有序:
- 有序:存进去的顺序和取出来的顺序相同,每一个元素都有下标;
- 可重复:存进去1,还可以在存储1;
- 2、Set集合接口 存储元素特点:无序不可重复:
- 无序:存进去的顺序和取出来的顺序不一定相同,Set集合中元素无下标;
- 不能重复:存进去1,就不能再存1了;
- 3、SortedSet集合存储元素特点继承Set:
- 无序不可重复;但是可以排序;
- 可排序:可以按照大小顺序排序
- 4、Map集合中的Key就是一个Set集合
- 在Set集合中存的数据,实际上放到了Map集合中的Key部分;
五、迭代器:Iterable
- 注意:Iterator遍历方式/迭代方式,是所有Collection通用的一种方式。
- 在Map集合中不能用。在所有的Collection以及子类中使用。
- 迭代时不管当初存进去是扫描对象,迭代的时候,都是Object类型(没有加泛型之前)
- 迭代分两步:第一步获取迭代对象 Iterator it = 集合.iterator();
- 第二部:while循环;调用Iterator 里面的hasNext();next()方法
/* 关于集合的迭代/遍历 */ public class CollectionTest03 { public static void main(String[] args) { // 创建集合对象 Collection c1 = new ArrayList(); // ArrayList集合:有序可重复 // 添加元素 c1.add(1); c1.add(2); c1.add(3); c1.add(1); // 迭代集合:存进去是什么类型,取出来还是什么类型。
//只不过在输出的时候会转换成字符串。因为这里println会调用toString()方法。 Iterator it = c1.iterator(); while(it.hasNext()){ Object obj = it.next(); System.out.println(obj); } // HashSet集合:无序不可重复 Collection c2 = new HashSet(); // 无序:存进去和取出的顺序不一定相同。 // 不可重复:存储100,不能再存储100. c2.add(100); c2.add(200); c2.add(90); c2.add(400); c2.add(50); c2.add(100); Iterator it2 = c2.iterator(); while(it2.hasNext()){ System.out.println(it2.next()); } } }
六、Collection 集合结构图:
七、Map集合结构图