Java基础之集合篇(一)

集合是Java基础中极其重要的一章,需要认真学习!!!

一:集合的概述

一方面,面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象具有一些弊端,而Java集合就像一种容器,可以动态地把多个对象的引用放入容器中。

作为对比,首先来看看数组在存储多个数据方面的特点与缺点:

  >特点:1.一旦初始化以后,其长度就确定了;2.且其元素类型也就确定了。我们之后只能操作指定类型的数据。

    > 缺点:1.一旦初始化后,长度不可改变;2.数组中提供的方法非常有限,对于添加,删除,插入数据等操作,非常不便,同时效率不高;3.数组存储的数据是有序可重复的,对于无序,不可重复的需求不能实现。

而集合则克服了以上缺点。其可分为 CollectionMap 两种体系:

(1)Collection接口:单列数据(用来存储一个一个的对象),定义了存取一组对象的方法的集合。如:(List:元素有序,可重复的集合,可理解为动态数组)、(Set:元素无序,不可重复的集合)等等,可以查阅文档找Collection。下面是Collection接口的继承树,实线都是继承关系,虚线都是实现关系。

(2)Map接口:双列数据(用来存储一对一对的数据),保存具有映射关系“Key-value对”的集合。Map接口的继承树如下

 

 二:Collection接口:

(1)声明Collection的对象要用其子类的实现类来声明,如 :Collection coll  = new ArrayList();  另外,在向该实现类的对象中添加数据obj时,要求obj所在类重写 equals()方法。

(2)迭代遍历集合中的元素:

注意!!!迭代器可以指定泛型,若不指定泛型,则调用next()时返回的是Object对象。若指定泛型,则返回对应泛型的对象。如: Iterator<Integer> iter = coll.iterator(); 则iter.next()返回Integer的对象。转为int要用Integer.intValue().

正确遍历方式:

错误的方式:

方式一调用一次next()指针就会下移一位。所以会跳跃输出。

方式二每次调用hasNext()会重新返回一个iterator对象,导致每次指针都指向头部。

   

(3)Collection集合与数组的转换:

(4)JDK5.0新增for each循环,用于遍历集合,数组:

(5)List接口的三个实现类:ArrayList、LinkedList、Vector

ArrayList源码分析:

 

LinkedList源码分析:

 List集合常用方法:

 注意List有两个重载的remove方法,一是remove(接收obj类型的形参),二是remove(接收的是index),注意调用时判断形参是哪一种。如list.remove(2)调用的是第二种,意为删除位置2上的元素,而不是删除元素2。要想删除元素2,就要调用第一种方法,传入对象形参即:list.remove(new Integer(2));

 

(6)Set接口三个实现类:HashSet、LinkedHashSet、TreeSet

Set接口说明:

HashSet的使用:

LinkedHashSet的使用:

是HashSet的子类,在添加数据的同时,每个数据还维护了两个指针,记录此数据的前一个数据地址和后一个数据地址(即双向链表)。优点:对于频繁的遍历操作,LinkedHashSet效率高于HashSet。

 

TreeSet的使用:(底层是使用了二叉树数据结构实现,可以对元素进行排序,元素只能是相同类)

  1. TreeSet是有序的Set集合,因此支持add、remove、get等方法。
  2. 如果往TreeSet添加元素的时候,如果元素本身具备自然顺序的特性,那么treeSet就会按照元素自然顺序的特性进行排序存储。
  3. 如果往TreeSet添加元素的时候, 如果元素本身不具备自然顺序的特性, 那么元素所属的类就必须要实现Comparable接口,把元素的比较规则定义在compareTo(T o)方法上。
  4. 在TreeSet中如果比较的方法返回的是0,该元素则被视为重复元素,不允许添加。
  5. 往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,而且元素所属的类没有实现Comparable接口, 那么在创建TreeSet对象 的时候就必须要传入一个比较器对象(Comparator)。

  6. lower、floor、ceiling 和 higher 方法分别返回小于、小于等于给定元素中的最大元素;大于等于、大于给定元素中的最小元素,如果不存在这样的元素,则返回 null。

 

 (注意:Set的底层基本上就是用 Map实现的。故面试中常问Map而不经常问Set。)

源码分析TreeSet:https://baijiahao.baidu.com/s?id=1645793326270896000&wfr=spider&for=pc

 

 

参考:https://www.bilibili.com/video/BV1Kb411W75N?

posted @ 2021-03-13 20:42  Only、  阅读(118)  评论(0)    收藏  举报