开发工具与关键技术:eclipse与java语言
作者:陈鑫鹏
撰写时间:2021年7月15日
Map集合
Map接口中键和值一一映射,可以通过键来获取值。
给定一个键和一个值,可以将该值存储在一个Map对象. 之后,就可以通过键来访问对应的值。
当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常.
当对象的类型和Map里元素类型不兼容的时候,就会抛出一个 ClassCastException异常。
当在不允许使用Null对象的Map中使用Null对象,会抛出一个NullPointerException 异常。
当尝试修改一个只读的Map时,会抛出一个UnsupportedOperationException异常。
下面是它的常用方法:
TreeMap类 与 TreeSet类似的是,TreeMap中也提供了一系列根据key顺序访问key-value对的方法:
由于TreeMap是有序的,也支持Comparable和Comparator两种排序方式。TreeMap主要是Key值排序
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