JAVA集合系列(1):集合的整体框架

前言

通常,我们的Java程序需要根据程序运行时才知道创建了多少个对象。如果在程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组对于数据类型极其长度是有限制的,要求存放相同类型的数据,且长度固定。此时,如果需要存放不同类型且长度不一的数据,怎么办?集合便应运而生了。

Java中集合类是放在java.util中,是一个用来存储多个对象的容器。

  • 只能存放对象,不能存放int等类型,存的是对应的是Integer等包装类对象;
  • 存的是对象的引用,对象本身是放在堆内存中.(存储的元素必须是引用类型);
  • 可以存放不同类型,且不限数量的数据。

1、集合的框架图

先放一张集合框架图:

Java中集合,从分支派系来看,注意分为两类:

  • Collection

  • Collection是集合类的根接口/祖宗接口。
  • 在Java源码包中,Collection接口没有直接的实现类,但它具有两个子接口类来传宗接代:即List集合、set集合。
  • List集合:一个有序的集合,可存储重复的元素。
  • set集合:无序的,且不能存储重复的元素。
  •  实际上Collection还有另一个子接口类:
  • Map

  • Map集合Java.util包中的另一个接口,它和Collection接口是相互独立的,都属于集合类的一部分。
  • Map集合是双列的,一般是成对出现的,即(键,值)总是以键值对出现,同样不允许存储重复元素。

2、Collection的子接口类

2.1 List集合

List接口有三个接口实现类:LinkedList集合、ArrayList集合、Vector集合。

LinkedList集合:
1) 底层数据结构是链表,查询慢,增删快
2)线程不安全,效率高
ArrayList集合:
1).底层数据结构是数组,查找快,增删慢。
2). 线程不安全,效率高
Vector集合:
1) 底层数据结构是数组,查询快,增删慢
2)线程安全,效率低

2.2 Set集合

Set接口有两个实现类:Hashset集合、Treeset集合。

Hashset集合:
1) 底层数据结构是哈希表,HashSet依赖于HashMap,它实际上是通过HashMap实现的。哈希表依赖两个方法hascode ()和equals()方法;
2)两个方法的执行顺序:
首先判断hascode()值是否相同
是:继续执行equals()方法,看其返回值
true:说明元素重复,不添加
false:就直接添加元素
否:就直接添加到集合
Treeset集合:
1)底层数据结构是二叉树。它依赖于TreeMap,它实际上是通过TreeMap实现的。


3.Map集合

Map集合是一个映射接口,即key-value键值对。Map中的每一个元素包含“一个key”和“key对应的value”。

  • AbstractMap是个抽象类,它实现了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。
  • Hashtable虽然继承于Dictionary,但它实现了Map接口。

【1】Map集合是Map集合的根接口,子类有:HashMap和TreeMap集合两个子类。
【2】Map集合中只键不能重复,而值是可以重复的
【3】子类的数据结构

  • Hashmap:底层数据结构是哈希表
  • Treemap底层数据结构是二叉树,其性质和Set的底层数据结构一样。

4.Iterator迭代器

  • Iterator:它是遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合。我们说Collection依赖于Iterator,是因为Collection的实现类都要实现iterator()函数,返回一个Iterator对象。
  • ListIterator:专门为遍历List而存在的。

5.工具类

  • Arrays:操作数组的工具类;
  • Collections:操作集合的工具类。

愿你就像早晨八九点钟的太阳,活力十足,永远年轻。

发布了93 篇原创文章 · 获赞 136 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_27706119/article/details/104762629