开发中使用集合的一些基本知识

1.集合的由来

     单个数据,可以使用变量保存

    多个数据,可以使用数组保存

    使用数组的前提:

     1、要保存的数据的数据类型是一致的;

     2、要保存的数据的数量是已知的;

   那么存储多个数据的数量不确定的情况?

     ---- 使用集合

2.集合和数组的区别

数组:

1、只能保存同一种类型的数据;

2、数组一旦创建,容量不可改变;

3、数组可以保存引用类型的数据和基本类型的数据;

 

集合:

1、可以保存不同类型的数据;

2、集合可根据需要自动扩容;

3、集合只能保存引用类型的数据;(为什么不能保存基本类型的数据)

       ---     向集合中添加基本类型的数据时,使用了自动装箱,实际添加的是该数据对应的包装类的对象

3.

4.Collection接口的一些特性

1、Collection接口是集合框架中的根接口,它描述的集合框架中所有集合工具类最共性的行为;

2、在集合框架中,有的集合类允许保存重复的元素,有些不允许保存重复的元素

3、有的集合类,数据存放和取出的顺序是一致的,有的是无序的;

4、这个接口很抽象,集合框架中没有它的直接实现类,而是一般都实现它的子接口;

5、因为这个接口很抽象,所以为了不同的需求,定义了不同的子接口扩展它;

5.Collection接口的一些方法

6.List接口

1、List接口的实现类,表示的容器里面保存的数据都是有序的(注意:这里说的有序,指的是,元素保存的顺序是有序的,和元素添加的顺序是一样的);

2、List接口的实现类,里面的元素像数组一样,都有索引

3、List接口实现类表示的容器,里面可以保存重复的元素

4、List接口定义了特殊的迭代器,对Iterator进行了扩展,可以双向迭代,等等;

三个比较常用的类:

ArrayList;LinkedList;Vector;(实现类)

ArrayList

1、ArrayList底层使用数组保存数据;

2、ArrayList里面允许存在null元素;

3、ArrayList和Vector类似,只是ArrayList是非线程安全的;

LinkedList

1、LinkedList底层使用双端链表的数据结构保存数据;

2、LinkedList的独有方法,主要是围绕链表的头和尾操作;

3、LinkedList也允许Null元素;

 

7.set接口

1、Set集合不包含重复元素;

2、一般Set集合判断两个元素是否相等,是通过equals方法判断的;

3、如果集合中可以保存null,那么这个集合中最多只能由一个null;

4、Set接口中没有对Collection接口扩展更新的功能;

常用实现类

HashSet

1、HashSet集合底层使用哈希表保存数据;

2、HashSet集合,添加数据的顺序和存储、获取的顺序不一致;

3、可以添加null元素,最多只能由一个null元素;

     --- 这里元素唯一性的原理是

         HashSet集合容器在保存对象时,会先调用对象的hashCode方法,获取对象的哈希码,判断应该将对象保存在哈希表中的哪个区域,然后遍历该区域的所有对象,通过equals方法判断是否有重复的元素;如果有,就不再保存;所以可以保证保存在容器中的数据都是唯一的;

LinkedHashSet

1、使用LinkedHashSet集合对象保存的数据,添加数据的顺序和迭代数据的顺序是一样的;

2、在LinkedHashSet底层,有一个哈希表和一个链表,哈希表负责保存数据和维护数据的唯一性;链表负责记录数据添加的顺序;

3、如果新添加数据时发现已经有相同的数据了,新的数据就不会再被添加;

TreeSet

1、TreeSet集合中保存的数据都是有序的,这里的有序指的是对元素进行了排序;

2、排序使用的是元素的自然顺序或者是创建集合对象时提供的Comparator排序;

以上单列数据集合总结:

8.Map集合

Map集合也是用来保存对象的,但和Collection集合只能一个个保存对象不同,Map集合一次保存的是一对对象,按照

键(K)——值(V)    对的关系保存;

Map集合的特点:

1,  Map集合中存储的是key-value的映射关系;

2,  Map集合中的每个映射包含键和值两个对象,同时映射本身也是一个对象,使用Map.Entry类描述;

3,  Map集合中的key必须保证唯一,不能重复,但值可以重复;

4,  Map集合中key和value都可以是null元素,但是key只能有一个null;

5,  Map集合不能直接遍历,只能通过键集、值集或键值对集遍历;

 

 

原文地址:https://www.cnblogs.com/mr-wuxiansheng/p/6155054.html