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
    如果喜欢我的文章,可关注我的公众号哦

  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/xujingyang/p/6538941.html
Copyright © 2011-2022 走看看