Java集合
Java集合知识点总结
开局一张图,内容全靠编!
上才艺!
集合框架
Collection接口(单列集合)
List
- 允许有重复对象
- 有序(存取都有序)
- 有索引
arraylist
- 元素数据并非直接存在ArrayList对象里,而是存在其进一步引用的数组里
- 便于快速随机访问
- 非同步
- 底层是数组实现
扩容:
- 默认为10,每次扩容是之前的1.5倍+1
- 新创建一个大小更大的数组把原数组的内容拷贝到新数组去把新数组的引用赋值到ArrayList对象的elementData字段上,完成扩容。
linkedlist
- 便于添加删除
- 非同步
- 底层链表实现
vector
- 线程安全,速度慢,被ArrayList取代,底层是数组
- Stack是Vector提供的一个子类,用于模拟栈
去重问题
- 利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,所以只能作为判断条件
- 利用LinkedHashSet不能添加重复数据并能保证添加顺序的特性(最快)
- 利用List的contains方法循环遍历
动态删除
- 迭代器动态删除会报ConcurrentModificationException
- 基于fail-fast快速失败机制
- java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的。快速失败的迭代器会抛出ConcurrentModificationException异常,而安全失败的迭代器永远不会抛出这样的异常
Queue
用于模拟”队列”这种数据结构(先进先出 FIFO)
Set
- 不允许有重复对象
- 无序
- 只能靠迭代器取元素
HashSet
- 线程不安全
- 基于散列函数实现,存取速度快
- 依赖元素的hashCode方法和euqals方法
- 底层为哈希表和红黑树实现
LinkedHashSet
- 具有HashSet的查询速度
- 内部采用双向链表维护元素的顺序(默认保持插入顺序排序,如果初始化时将accessOrder设置为true将使用最近最少顺序,即最近使用的元素插在链表尾部)
- 是有序得结合(区别其他)
- 底层是哈希表和链表实现
TreeSet
- 线程不安全,可以对Set集合中的元素进行排序,底层采用了红黑树
- 通过compareTo或者compare方法中的来保证元素的唯一性
- 二叉树s实现,多用于排序
Map接口(双列集合)
Hashtable
- 线程安全,速度慢。底层是哈希表数据结构
- 不允许null作为键,null作为值
HashMap
- 线程不安全,速度慢,底层也是哈希表数据结构
- 允许null作为键,null作为值
LinkedHashMap
可以保证HashMap集合有序。存入的顺序和取出的顺序一致。
- hashmap+linkedlist(双向循环链表)
- next用于维护HashMap指定table位置上连接的Entry的顺序的
- before、After是用于维护Entry插入的先后顺序的
- new LinkedHashMap<K, V>(0, 0.75f, true)这句代码表示,初始容量为零,0.75是加载因子,表示容量达到最大容量的75%的时候会把内存增加一半。最后这个参数至关重要。表示访问元素的排序方式,true表示按照访问顺序排序,false表示按照插入的顺序排序。这个设置为true的时候,如果对一个元素进行了操作(put、get),就会把那个元素放到集合的最后
- LRU底层实现
Properties
用于配置文件的定义和操作,使用频率非常高,同时键和值都是字符串。是集合中可以和IO技术相结合的对象
TreeMap
用来对Map集合中的键进行排序.底层是采用红黑树
集合视图
Set keyset()
——返回map中包含的所有key的一个Set视图Collection values()
——返回一个map中包含的所有value的一个Collection视图Set< Map.Entry < K,V > > entrySet()
——返回一个map钟包含的所有映射的一个集合视图
collections工具类
是针对集合类的一个帮助类,提供了操作集合的工具方法:一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
1.sort()
:
- 第一种是list中的对象实现Comparable接口
- 第二种方法是根据Collections.sort重载方法来实现
2.shuffle()
:对集合进行随机排序
3.indexOfSubList()
:查找subList在list中首次出现位置的索引
4.replaceAll
替换批定元素为某元素,若要替换的值存在刚返回true,反之返回false
5.reverse
反转集合中元素的顺序
6.lastIndexOfSubList、min、max
分类
线程安全
- Vector:Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector
- HashTable
- StringBuffer
线程不安全
- ArrayList
- LinkedList
- HashMap
- HashSet
- TreeMap
- TreeSet
- StringBulider