集合

Collection集合:包括List和Set接口

        单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List和java.util.Set。其中List的特点是元素有序、元素可重复Set的特点是元素无序,而且不可重复。List接口的主要实现类有java.util.ArrayList和java.util.LinkedList,Set接口的主要实现类有java.util.HashSet和java.util.TreeSet。

一、List集合(线性方式进行存储)有序可重复

    1、List接口的特点

        ①是一个元素存取有序的集合

        ②是一个带索引的集合

        ③可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素

        2、List接口常用方法

            ①public void add(int index, E element) : 将指定的元素,添加到该集合中的指定位置上。

            ②public E get(int index) :返回集合中指定位置的元素。

            ③public E remove(int index) : 移除列表中指定位置的元素, 返回的是被移除的元素。

           ④ public E set(int index, E element) :用指定元素替换集合中指定位置的元素,返回值的更新

前的元素。  

        3、List的子类

            ArrayList集合(存储的结构是数组结构,增删慢,查找快):

                         由于开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合

        LinkedList集合(存储的结构是链表结构,方便元素添加、删除的集合)双向链表

二、Iterator迭代器

       Iterator接口

            主要用于迭代访问(即遍历)Collection中的元素

        ①获取迭代器的方法:

            public Iterator iterator():获取集合对应的迭代器,用来遍历集合中的元素

        ②Iterator接口的常用方法

            public E next():返回迭代的下一个元素

            public boolean hasNext(): 如果仍有元素可以迭代,则返回true.

Iterator it = list.iterator();

while(it.hasNext()) {

  Object obj = it.next();

}

    增强for

        增强for循环(也称for each循环),专门用来遍历数组和集合。它的内部原理其实是个迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作

        格式:

            for(元素的数据类型  变量   :Collection集合or数组){

                    //写操作代码

            }

三、Set接口(无序不可重复)

        1,HashSet集合

                ①jav.util.HashSet底层的实现其实是一个java.util.HashMap支持

                ②HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于:hashCode与equals方法

        2,HashSet集合存储数据的结构(哈希表)

                什么是哈希表

                    JDK1.8中,哈希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。

                    简单的来说,哈希表是由数组+链表+红黑树实现的


四、Collections

        常用功能

            java.utils.Collections是集合工具类,用来对集合进行操作

五、Comparator比较器

                简述Comparable和Comparator两个接口的区别

                Comparable:强行对实现他的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。想要集合中的元素完成排序,那么必须要实现比较器Comparable接口。

六、HashMap与Hashtable的区别

1.HashMap是非同步的,没有对读写等操作进行锁保护,所以是线程不安全的,在多线程场景下会出现数据不一致的问题。HashTable是同步的,所有的读写操作都进行了锁(synchronized)保护,在多线程环境下没有安全问题。但是所保护会对读写的效率产生较大影响

2.HashMap结构中,是允许保存null的,Entry.key和Entry.valiue均可以为null。但是HashTable是不允许保存null的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容