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

 

posted @ 2021-06-07 19:56  Xiarsu  阅读(90)  评论(0)    收藏  举报