一、Map集合
Map接口中键和值一一映射.可以通过键来获取值。
给定一个键和一个值,你可以将该值存储在一个Map对象.之后,你可以通过键来访问对应的值。
当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常.
当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常。
当在不允许使用Null对象的Map中使用Null对象,会抛出一个NullPointerException异常。
当尝试修改一个只读的Map时,会抛出一个UnsupportedOperationException异常。
常用方法
TreeMap类
与 TreeSet类似的是,TreeMap中也提供了一系列根据key顺序访问key-value对的方法:
二、Java集合工具类:Collections
Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象实现同步控制等方法。
1.排序操作
2.查找和替换操作
3.同步控制
Collections类中提供了多个synchronized...()方法,这些方法可以将指定集合包装成线程同步(线程安 全)的集合,从而可以解决多线程并发访问集合时的线程安全问题。
Java中常用的集合框架中的实现类ArrayList、Linkedlist、 HashSet、TreeSet、 HashMap和TreeMap都是线程不安全的。如果有多个线程访问它们,而且有超过一个的线程试图修改它们,则存在线程安全的问题。Collections提供了多个类方法可以把它们包装成线程同步的集合。
三、Java集合总结
List,Set,Map是集合体系中最主要的三个接口。其中list和set是继承自collection接口。Map也属于集合系统但是与collection接口不同
list是有序且允许元素重复,允许元素为null,ArrayList、LinkedList和Vector是三个主要的实现类
(1)、Vector、ArrayList都是以类似数组的形式存储在内存中,LinkedList则以链表的形式进行存储。
(2)、Vector线程安全的(同步),ArrayList、LinkedList线程不安全的(不同步)。
(3)、ArrayList、Vector适合查找,不适合指定位置的插入、删除操作;LinkedList适合指定位置插入、删除操作,不适合查找。
(4)、ArrayList在元素填满容器时会自动扩充容器大小的50%,而Vector则是100%,因此ArrayList更节省空间
set是无序,不允许元素重复;HashSet和TreeSet是两个实现类
(1)、HashSet 基于HashMap实现,HashSet中的数据是无序的,可以放入null,但只能放入一个 null,两者中的值都不能重复, 要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的
(2)、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值
Comparator和 Comparable的区别Comparator定义在 类的外部, 此时我们的类的结构不需要有任何变化,从小到大:o1-o2 从大到 小:o2-o1 Comparable 定义在 类的内部,耦合性较强从小到大 :this-o 从大到小:o-this。