java基础集合

                                                   java常用集合的理解

首先,需要明白什么是集合?简单的理解:在java中集合就是容器。既然是容器,那就是来存储数据的。既然是可以存储数据的那数组也是容器也可以存储数据,两者的区别呢?

数组和结合的区别:

     1.数组的长度是固定的,在创建数组对象时就已经确定(例如 new int[10] 那么该数组的长度就是10,后面对数据的存储长度不可以超过10,否则就会报ArrayIndexOutOfBoundsException异常),而集合的长度是可以改变的。

      2.数组的用来存储基本类型的数据,集合用来存放对象的引用。

按照集合类型,可以将集合分为两类,单列集合和双列集合。

单列集合:

     单列集合以Collection为超类接口,Set和List都继承自Collection。在List集合体系中,主要学习ArrayList和LinkedList,这两个类都是接口List的实现类。在Set集合体系中,主要学习HashSet和TreeSet,这两个集合类是Set接口的实现类。

ArrayList集合的特点:

        1.底层是数组结构。

        2.集合内允许重复数据,存入和取出的顺序一致。

扫描二维码关注公众号,回复: 2669672 查看本文章

        3.存入的元素有索引(这点很好理解,底层是数组啊)。

        4.因为底层是数组,所以对数据的获取速率教高,增删比较慢。

        5.不是线程同步的

LinkedList集合的特点:

        1.底层是链表结构。

        2.集合内允许重复数据,存入和取出的顺序一致。

        3.存入的元素有索引。

        4. 对数据的增删效率较高,获取较慢。

        5.不是线程同步的。

这里主要说明一下为什么ArrayList和LinkedList特点的第四点(这里因为无法上传图片,只能通过文字说明):ArrayList底层是数组,所以可以直接通过数组的角标直接获取到对应的数据,但是为什么增删会比较慢?举个列子,十个人站队,每个人都拿着对应位子顺序的牌子,第一位拿着1号,第二位拿着2号......但是这时有个人想要插队,插进第一个和第二个之间,那么此时后面的顺序就要往后瞬移,移除也是类似的道理。LinkedList集合底层是链表结构(有单向链表,双向链表),以单向链表为例,单向列表的每一个节点的末尾都会记住下一个节点的首地址,所以当有增删操作时,只需要该变节点与节点之间的地址,但是当需要通过索引获取节点中的数据时效率比较点(有兴趣的同学可以去看一下jdk的底层源码),在调用get()方法时,jdk底层会采用折半算法去查找数据,而且每一次查找都是从链表 的首位开始,效率比较低。根据以上集合特点在遍历集合(存在对集合元素删除的操作时)建议从集合的末尾开始遍历集合(

for (int i =list.size(); i <=0; i--) {
    
 }

HashSet集合的特点:

       1.由哈希表构成,底层是数组加链表(红黑树)的结构

       2.集合内不允许重复数据,存入和取出的顺序一致。

        3.存入的元素与取出的数据没有顺序。

       4.不是线程同步的。

TreeSet集合的特点:

       1.底层由二叉树结构,实现内部排序。

       2.集合内不允许重复数据,存入和取出的顺序一致。

        3.存入的元素与取出的数据没有顺序。

       4.不是线程同步的。

这里主要说明HashSet集合和TreeSet集合在使用的时候需要注意的地方:1.HashMap 存入的元素对象需要重写hashcode()和equals()方法,当调用add()方法,set集合会先调同这两个放法来判断存入集合是否重复,重复就不存。2.TreeSet集合在使用时需要传入Comparetor()比较器,或者存入的集合对象实现Comparable()接口,并重写compareTo()方法。

Map

map集合为双列集合,该类型集合主要以键值对的形式存在(Key=Value)。HashMap和TreeMap是该接口的实现类(这里就不详说了,按照前文可知HashMap和TreeMap的结构特点,注意HashMap的主键对象需要重写hashcode()方法来保证存入的主键的唯一性。)

这里我们需要知道map集合的三种迭代方式:

      1.KeySet()方法:将该集合中的所有键对象以Set集合的形式返回。

       2.values()方法:将该集的所有值对象以Collection集合的形式返回。

     3.entrySet()方法():返回此映射中包含的映射关系的Set视图(即将map中的映射关系封装成装Map.Entry对象保存在Set集合中)。

                            

猜你喜欢

转载自blog.csdn.net/weixin_41742349/article/details/81539595