废话不多说先上图
首先为什么会出现集合这个东西呢?主要原因还是数组的功能局限。集合呢跟数组一样也是个容器,数组可以用来存放基本数据类型和引用数据类型,但是集合只能存放引用数据类型,因为数组一但定义好了大小就不能改变但是我们有时候需要这个容器的大小动态变化时候,数组就满足不了我们的需求了,所及Java中就提供了集合类,方便对对象的操作。可以看到Collection的左边还有Iterator 这个是迭代器,迭代器就相当于一只不断从集合中拿东西的手,可以通过迭代器遍历集合中的所有元素
collection
先来看最中间最上层的Collection,Collection是根接口,Collection是存放一组对象的容器。Collection接口中的成员方法大致主要有两种:一种是判断类型的返回值是true或者false,另一种就是对其中的元素进行操作的,比如添加删除替换这类的。可以看到Collection的左边还有Iterator 这个是迭代器,迭代器就相当于一只不断从集合中拿东西的手,可以通过迭代器遍历集合中的所有元素 - List List是一个可以包含重复元素的Collection 用户可以通过操作索引的方式对此列表中的元素进行进行精确的查找。此列表中允许有重复的元素,List集合有自己特殊的迭代器ListIterator,相比Iterator多了逆序的遍历方式。 List集合下面是ArrayList和LinkedList,ArrayList的底层是数组实现的,数组的好处呢就是查询比较方便通过索引直接就可以找到想要的元素,但是添加和删除比较麻烦,因为数组的长度是不可变的所以需要重新定义一个数组,LinkedList的底层是链表实现的,链表的好处就是添加删除比较方便直接操作链表的指向就可以,坏处呢就是链表的查找比较慢需要从头开始一个一个比较。 - Set Set是一个不包含重复元素的 collection Set接口中包含HashSet和TreeSet,HashSet由哈希表结构保证没有重复的值,但是不保证存入和取出的顺序一致,TreeSet内部自动包含了元素排序的方法。LinkedHashSet由链表实现存入和取出的顺序一致由哈希表保证不重复。
Map
再来看Map接口,Map是双列集合,将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。- HashMap 基于哈希表的Map接口的实现允许空值和空键,但是不保证存入和取出的顺序一致。LinkedHashMap是HashMap的子类在HashMap的基础上通过链表保证了存入和取出的顺序一致。 - TreeMap也是基于哈希表的Map实例内部实现了排序功能
再来看一下最后单独的两块,Utilites是是工具类,其中包含了集合工具类Collections和数组工具类Arrays 包含了一些对集合和数组元素常用的操作的方法。
最后就是Comparable和Comparator了 TreeSet和TreeMap实现的排序功能就是通过这两种方式。
实现Comparable接口,并且实现compareTo方法规定比较规则
或者直接通过匿名内部类的方式new Comparator重写 compareTo方法的方式规定排序规则