集合-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集合结构图

 

posted @ 2022-04-24 23:42  280887072  阅读(107)  评论(0编辑  收藏  举报