java集合框架
一、java集合框架概述
java集合类从1.0开始不断完善,其中使用了丰富的数据结构(数组,队列,栈,链表,二叉树,哈希表等),主要有list,set,map三大接口及其子类实现,为我们提供了丰富的适应于不同场景的工具类。
在实际的开发中我们会遇到很多种需求场景,只有充分理解java集合框架下面的类的特点,具体场景需要使用什么集合类才会游刃有余。
二、List集合
list集合有一些共性方法增删改查。
集合的遍历有iterator和listiterator方法。其中后者是前者的子接口。
在使用iterator迭代时,不可以通过结合对象的方法操作集合中的元素,否则会发生concurrentModificationException异常。在迭代时只能使用迭代器的方法。
iterator:判断、取出、删除
listiterator: 添加、修改、判断、取出、删除。
Collection:
---- List:元素是有序的,元素可以重复,因为该集合有索引。判断元素是否相同用equals()方法.
-----ArrayList(动态数组
):数据结构为数组,查询速度快,增删慢,线程不同步。
默认有10个元素,扩大50%的增加。
-----LinkedList(链表、队列、堆栈):数据结构为链表,查询速度慢,增删快。
特有方法:1)、addFirst(),addLast(),
2)、getFirst(),getLast(),获取元素但是不删除.
果集合中没有元素,会产生
NoSuchElementException。
3)、 removeFirst(),removeLast(),获取元素并删除,如果集合中没有元素,会产生
NoSuchElementException。
jdk1.6替代方法:offerFirst(),offerLast()
peekFirst(),peekLast()获取元素不删除。如果集合中没有元素,会返回null.
pollFirst(),pollLast().获取元素并删除。如
果集合中没有元素,会返回null.
-----Vector:数据结构为数组,线程同步,被ArrayList替代。(特有枚举(名字过长)、addElement等)
容量需要扩大时,成倍增加.
---- Set:元素是无序的,元素不可以重复。存入和取出时的顺序不一定一致。(set底层使用了Map集合)
-----HashSet:数据结构是哈希表,线程不同步。
通过hashCode()和equals()方法判断元素是否相同和删除操作.
如果元素的HashCode相同,会继续判断equals是否为true。如果元素的HashCode值不同,不 会调用equals方法.
-----TreeSet:数据结构是二叉树,可以对集合中的元素进行排序。
通过compareTo()方法判断元素唯一性,compareTo方法返回0.
排序方法:1)元素自身实现comparable接口,或者实现一个comparator构造器。
2)当comparable和comparator都存在时,以comparator为主。
三、Map集合:该集合存储键值对,必须保证键的唯一性。
1.添加2.删除clear,3.判断containsValue,containsKey,isEmpty4.获取get,size,values,entrySet,keySet.
添加元素如果出现相同的键,返回原来的值,并覆盖。
Map集合两种取出方式:
1):keySet 将集合中的key取出。
2)entrySet。Set<Map.Entry<K,V>>将Map集合中的映射关系存入到set集合中。
-----HashTable:数据结构是哈希表,不可以存入null键和null值。线程同步。(被HashMap替代)
-----HashMap:数据结构是哈希表,可以存入null键和null值,线程不同步。
通过hashCode和equals方法判断相同
-----HashSet:数据结构是二叉树,不同步,可以给键排序。
通过conparable和comparator比较。
四、线程安全类
在集合框架汇总,有些类是线程安全的,这些都是在JDK1.1中出现的。JDK1.2之后,出现了很多非线程安全类
-------Vector:比ArrayList多了线程安全
-------Stack:堆栈
-------HashTable:比HashMap多了线程安全
-------Enumeration:枚举,相当于迭代器。