zoukankan      html  css  js  c++  java
  • java高薪之路__003_集合

    Java集合可分为Collection和Map两大体系

    Collection接口
      |---- Set: 元素无序、不可重复
      |---- List: 元素有序、可重复  (动态数组)
      |---- Queue:
    元素无序、可重复,队列
    Map接口
      |---- 具有键值的映射关系(key - value),key是用set来存的,所以要不能重复,value可以重复
        |---- HashMap
          |---- LinkedHashMap
        |---- HashTable
          |---- Properties
        |---- SortedMap(这是一个接口,继承了Map接口)
          |---- TreeMap
        

     

    在这张图中的SortedSet也是一个接口,继承了Set接口,然后TreeSet实现了SortedSet接口

    注:为LinkedHashSet

    List

    ArrayList和Vector的显著区别是:ArrayList是线程不安全的,当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性。但Vector是线程安全的,无需保证集合的同步性。因为Vector是线程安全的,所以Vector的性能要比ArrayList集合的性能要低。实际上,即使需要保证List集合的线程安全,也同样不推荐使用Vector

    在HashSet集合中,判断两个元素相同的标准是:两个对象通过equals()方法相等,且HashCode()方法的返回值也相等。如果有两个元素通过equals()方法比较相等,而HashCode()的返回值不同,HashSet会将这两个对象保存在不同的地方

    Map

    HashMap和Hashtable是Map接口的典型实现类。HashMap和Hashtable存在两点典型区别:
    1.Hashtable是一个线程安全的Map实现,但HashMap是线程不安全的实现,所以HashMap比Hashtable的性能更高一些;但如果有多个线程访问同一个Map对象时,使用Hashtable会更好。
    2.Hashtable不允许使用null作为key和value,如果试图将null值放进Hashtable中,将会引发NullPointerException异常,但HashMap可以使用null作为key或value。
    PS: A.由于HashMap中的key不能重复,所以HashMap中只能最多有一个key
    -value对的key为null,但可以有无数多个key-value对的value为null。 B.Hashtable是一个古老的类,他的名字甚至没有遵守java命名规范。与Vector类似,尽量少用Hashtable实现类,即使是需要创建线程安全的Map实现类,也无需使用Hashtable实现类。 C.HashMap和Hashtable判断两个key值相等的的标准是:两个key通过equals()方法比较返回true,两个key的Hashcode值也相等。

    LinkHashMap是使用双向链表来维护key-value对的次序(其实只考虑了key的次序),该链表负责维护Map的迭代顺序,迭代顺序与key-value对的插入顺序一致。

    Properties是Hashtable的子类,该对象在处理属性文件时十分方便。Prooperties类将Map对象和属性文件关联起来,从而可以将Map对象中的key-value对写入属性文件中,也可以将属性文件中的“属性名=属性值”加载到Map对象中。由于属性文件中的属性名和属性值都是字符串类型,所以Properties里的key、value都是字符串类型的。

    正如Set接口派生出SortedSet子接口,SortedSet接口有一个TreeSet实现类一样。Map接口也派生出一个SortedMap子接口,SortedMap接口也有一个TreeMap实现类。
    TreeMap就是一个红黑树数据结构,每个key-value对作为红黑树的一个节点。
    TreeMap在存储key-value对(节点),需要根据key对节点进行排序。TreeMap保证所有的key-value对处于有序状态。TreeMap有两种排序方式:
    自然排序:TreeMap的所有key必须实现Comparable接口,而且所有key必须是同一个类的对象,否则会抛出ClassCastException异常。
    定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的key进行排序。采用定制排序不要求TreeMap中的key实现Comparator接口

    遍历

    在此之前需要先了解一个Java8的新特性--Lambda表达式
    可以参考这两个地址的描述:
    1. http://blog.csdn.net/ioriogami/article/details/12782141
    2. http://www.jdon.com/idea/java/10-example-of-lambda-expressions-in-java8.html

    然后是所有的遍历操作
    参考地址:
    1. http://www.cnblogs.com/mercuryli/p/4615230.html
  • 相关阅读:
    《Scrum实战》第0次课【如何学习敏捷】全团课后任务汇总
    关于 Android 5.0 原生系统网络图标上的感叹号问题解决方法
    [Android Tips] 18. Enable/Disable WiFi via adb
    [Android Tips] 17. 查看 APK 签名信息
    [Android Tips] 16. Update Android SDK from command-line
    [Android Tips] 15. Enforcing spaces in string resources
    Gradle Cheat Sheet
    [Android Tips] 14. Using Proguard with Android without obfuscation
    cuda线程/线程块索引小结
    cuda编程学习6——点积dot
  • 原文地址:https://www.cnblogs.com/hangtt/p/4854115.html
Copyright © 2011-2022 走看看