zoukankan      html  css  js  c++  java
  • 集合--查漏补缺

     

    List特点:有序,不唯一(可重复)

    ArrayList实现了长度可变的数组,在内存中分配连续的空间。
      • 优点:遍历元素和随机访问元素的效率比较高
      • 缺点:添加和删除需要大量移动元素效率低,按照内容查询效率低
    LinkedList采用链表存储方式。
      • 优点:插入、删除元素时效率比较高
      • 缺点:遍历和随机访问元素效率低下

    Iterator接口

      • 所有的集合类均未提供相应的遍历方法,而是把遍历交给迭代器完成。迭代器为集合而生,专门实现集合遍历
    Iterator方法
      • boolean hasNext():判断是否存在另一个可访问的元素
      • Object next():返回要访问的下一个元素
      • void remove():删除上次访问返回的对象
    可以使用Iterator遍历的本质是什么?
      • 实现Iterable接口

    ListIterator接口

    在循环的过程中可以执行增删操作

    1 ListIterator li=al.listIterator();
    2 while(li.hasNext()){
    3      Object obj=li.next();
    4      if ("java2".equals(obj)) {
    5             li.add("java9994");
    6        }
    7 }

    set接口

    HashSet:采用Hashtable哈希表存储结构

      • 优点:添加速度快,查询速度快,删除速度快
      • 缺点:无序

    LinkedHashSet

      • 采用哈希表存储结构,同时使用链表维护次序
      • 有序(添加顺序)

    TreeSet

      • 采用二叉树(红黑树)的存储结构
      • 优点:有序(排序后的升序)查询速度比List快 (按照内容查询)
      • 缺点:查询速度没有HashSet快

    注★★★

    ❤HashSet和LinkedSet保证数据唯一的方法是先判断hashcode是否相同,如果相同则比较equals方法,
        如果不同则不用比较,装入的自定义对象要重写hashcode方法和equals方法才可以实现数据的唯一性
    
    ❤TreeSet保证数据唯一的方法是存入的数据类型必须需要实现Compareable接口
    
    ❤只有TreeSet的toString方法输出的事按照类型实现的有序输出的

    Collections的两个sort方法:

    1 static <T extends Comparable<? super T>> void sort(List<T> list) 
    2                     根据元素的自然顺序 对指定列表按升序进行排序。 
    3 static <T> void  sort(List<T> list, Comparator<? super T> c) 
    4                     根据指定比较器产生的顺序对指定列表进行排序。 
    一个参数的,集合中的数据类型要实现 Comparable接口
    两个参数的是根据指定的排序方法,其中第二个参数是实现Comparator的类,重写的compare方法比较的是第一个参数的属性,第一个不用实现任何接口

    Map接口

    Map(接口)

      • 特点key-value映射

    HashMap

      • Key无序 唯一(Set)
      • Value无序 不唯一(Collection)

    LinkedHashMap

      • 有序的HashMap

    TreeMap

      • 有序 速度没有hash快

    问题:Set与Map有关系吗?

      • 采用了相同的数据结构,只用于map的key存储数据

    HashMap和linkedHashMap的区别

      • 人们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现,它还可以按读取顺序来排列.
      • HashMap是一个最常用的Map,它根据键的hashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
      • HashMap最多只允许一条记录的键为NULL,允许多条记录的值为NULL。
      • HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致性。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
      • LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。

    Collections工具类

    类似于操作数组的Arrays工具类
      • Collections和Collection不同,前者是集合的操作类,后者是集合接口
      • Collections提供的静态方法
    主要方法:
      • static boolean addAll(Collection<? super T> c, T... elements) 将所有指定元素添加到指定 collection 中。
      • static <T extends Comparable<? super T>> void sort(List list) 根据元素的自然顺序 对指定列表按升序进行排序。
      • static void sort(List list, Comparator<? super T> c) 根据指定比较器产生的顺序对指定列表进行排序。

      • static int binarySearch(List<? extends Comparable<? super T>> list, T key) 使用二分搜索法搜索指定列表,以获得指定对象。

      • static int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 使用二分搜索法搜索指定列表,以获得指定对象。

      • static void fill(List<? super T> list, T obj) 使用指定元素替换指定列表中的所有元素。

      • static void reverse(List<?> list) 反转指定列表中元素的顺序。

    集合总结几张图

     

    集合常见面试题

     


    作者:oldmonk
    出处:www.jingyangxu.cn
    作者简介:oldmonk,俗称:老徐。
    请记住:你比他好一点,他不会承认你,反而会嫉妒你,只有你比他好很多,他才会承认你,然后还会很崇拜你,所以要做,就一定要比别人做得好很多!
    我的个人微信号:dongfengyang ,欢迎大家找我聊天,记录你我的故事。

    本文如对您有帮助,记得点击右边跳动小球【赞一下】 n(*≧▽≦*)n
    如果喜欢我的文章,可关注我的公众号哦

  • 相关阅读:
    Django REST Framework之版本控制
    Django REST Framework之频率限制
    webpack4进阶配置
    高阶函数map,filter,reduce的用法
    Vue+elementui 实现复杂表头和动态增加列的二维表格
    Pika源码学习--pika和rocksdb的对接
    Pika源码学习--pika的命令执行框架
    Pika源码学习--pika的PubSub机制
    Pika源码学习--pika的通信和线程模型
    pika源码学习--开篇
  • 原文地址:https://www.cnblogs.com/xujingyang/p/6538941.html
Copyright © 2011-2022 走看看