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

java高薪之路__003_集合的更多相关文章

  1. java高薪之路__009_网络

    1. InetAddress类2. Socket: IP地址和端口号的结合,socket允许程序把网络连接当成一个流,数据在两个socket间通过IO传输, 通信的两端都要有socket. 主动发起通 ...

  2. java高薪之路__008_Annotation

    元注解 共有4种 @Retention 表示需要在什么级别保存该注释信息(生命周期) |--- RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉 |--- Reten ...

  3. java高薪之路__007_反射

    参考地址: 1. http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html2. http://www.cnblogs.com/ ...

  4. java高薪之路__005_IO流

    参考地址: 1. http://blog.csdn.net/yczz/article/details/38761237 File类 ObjectInputStream && Objec ...

  5. java高薪之路__002_异常处理

    自定义异常 package learn.JavaBasics.Class; import java.util.Date; /** * 如何自定义一个异常类 * 1. 继承一个现有的异常类 * 2. 提 ...

  6. java高薪之路__001_类

    Java中内部类分四种:成员内部类.局部内部类.静态内部类和匿名内部类.要注意静态内部类的调用方式与其他不同,采用的是类似调用类中的静态属性.静态方法的方式 Multi Level 调用不同类中的相同 ...

  7. java高薪之路__010_设计模式

    设计模式只是一个在构建大型工程时,为了方便更改,添加,查询和管理的一种代码工具,没有必要单独为了设计模式而使用设计模式,使简单的事情复杂化. 总体来说设计模式分为三大类: 1. 创建型模式,共五种 - ...

  8. java高薪之路__006_多线程

    线程的创建有两种方式 package learn.JavaBasics.Class; public class ThreadDemo extends Thread { private static i ...

  9. java高薪之路__004_泛型

    参考地址: 1. http://www.cnblogs.com/lwbqqyumidi/p/3837629.html2. http://www.cnblogs.com/abcwt112/p/47350 ...

随机推荐

  1. UML聚合与组合

    http://www.cnblogs.com/shanwenbin/archive/2012/10/24/2737229.html UML聚合与组合 2012-10-24 15:35 by DayDa ...

  2. 转: Linux磁盘扩容

    from:https://www.rootusers.com/how-to-increase-the-size-of-a-linux-lvm-by-expanding-the-virtual-mach ...

  3. Spring task executor同异步

    1. spring提供了哪些任务执行器,是否有同步的任务执行器 有ThreadPoolTaskExecutor等执行器 同步可以用SyncTaskExecutor,但这个可以说不算一个线程池,因为还在 ...

  4. Datatable的查找和排序(Datatable.Select)

    Datatable  是一种常用的数据结构.数据类型有点类似于数据库中的表结构.在没有使用优秀的orm框架前,大部分的数据库的数据都是先变为Datatable 然后再通过代码转换变成 object. ...

  5. JS中Float类型加减乘除 修复

    MXS&Vincene  ─╄OvЁ  &0000027─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好, ...

  6. Android TextWatcher监控EditText中的输入内容并限制其输入字符个数

    布局中EditText在android布局中经常用到,对EditText中输入的内容也经常需要进行限制,我们可以通过TextWatcher去观察输入框中输入的内容,作个笔记. 主布局: <?xm ...

  7. SSIS Error The Execute method on the task returned error code 0x80131621

    Error Message: The Execute method on the task returned error code 0x80131621 (Mixed mode assembly is ...

  8. Intel+Ardruino 101 翻转时点灯

    /*  ===============================================  Example sketch for CurieIMU library for Intel(R ...

  9. php用mysql函数出错

    很可能只是因为你忘了装mysql扩展 apt-get install php5-mysql

  10. [转]SVN客户端解决authorization failed问题

    转载地址:http://blog.csdn.net/patdz/article/details/7669591 1. 创建文件夹 E:\STWSource\STWLibrarySVN 2.在文件夹ST ...