Java-集合
一.集合
1.为什么要用集合:
在程序开发阶段,为了满足常规的编程需要,要能在任意时间、地点创建任意数量的对象,所以就想到用集合来先容纳这些对象。
2.集合概念:
用来存放对象的容器,集合类放在java.util包中。
几个点:A.集合只能存放对象。比如你存入一个int型数据66放入集合中,其实它是自动转换成Integer类后存入的,Java中每一种基本数据类型都有对应的引用类型。
B.集合存放的都是对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用。对象本身还是放在堆内存中。
C.集合可以存放不同类型、不限数量的数据类型。
3.集合和数组区别:

二.集合框架
集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:
a.接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象
b.实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
c.算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
除了集合,该框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。
Java 集合框架提供了一套性能优良,使用方便的接口和类,java集合框架位于java.util包中, 所以当使用集合框架的时候需要进行导包。

上述所有的集合类,除了map系列的集合,即左边的集合都实现了Iterator接口。
Iterator是一个用来遍历集合中元素的接口,主要有hashNext(),next(),remove()三种方法。它的子接口ListIterator在它的基础上又添加了三种方法,分别是add(),previous(),hasPrevious()。
从图中可以看到:
(1).集合主要分为Collection和Map两个接口。Collection存储一个元素集合,Map存储键/值对映射。
(2).Collection又分别被List和Set继承。
(3).List被AbstractList实现,然后分为3个子类,ArrayList,LinkList和VectorList。
(4).Set被AbstractSet实现,又分为2个子类,HashSet和TreeSet。
(5).Map被AbstractMap实现,又分为2个子类,HashMap和TreeMap。
(6).Map被Hashtable实现。
三.集合接口
1.

2.Set和List集合
(1)区别:

(2)List:
(a)ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素;
(b)LinkedList: 底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素;
(c)Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素。
(3)Set:
(a)HashSet:底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素,元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的,如果没有重写这两个方法,则无法保证元素的唯一性。
(b)LinkedHashSet:底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高。
(c)TreeSet:底层数据结构采用二叉树来实现,元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。
3.Map集合
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。
四.集合实现类(集合类)
五.集合算法
集合框架定义了几种算法,可用于集合和映射。这些算法被定义为集合类的静态方法。
在尝试比较不兼容的类型时,一些方法能够抛出 ClassCastException异常。当试图修改一个不可修改的集合时,抛出UnsupportedOperationException异常。
集合定义三个静态的变量:EMPTY_SET,EMPTY_LIST,EMPTY_MAP的。这些变量都不可改变。
六.迭代器
七.比较器
参考学习:
https://blog.csdn.net/feiyanaffection/article/details/81394745
https://www.runoob.com/java/java-collections.html
https://www.cnblogs.com/lixiansheng/p/11348050.html

浙公网安备 33010602011771号