Java基础 (5) - 集合

Java集合大体分为 List、Set、Queue和Map 四种体系,
List表明有序、重复的集合;(ArrayList、LinkedList、Vector)
Set表明无序、不可重复的集合; (HashSet、LInkedHashSet、TreeSet)
Queue Java5增长,表明一种队列的集合 (priorityqueue)
Map则表明具备映射关系的集合html

Collection接口
1.Set、LIst、Queue都继承Collection接口。
2.HashSet不能存重复的值(元素能够为null),线程不安全,且是无序的,若是想有序使用LinkedHashSet。(因为使用了链表 插入和删除速度变快 但遍历速度下降)
3.ArryaList能存重复的值(元素能够为null),有序的,线程不安全,若是想线程安全可使用Vector(有序)。还有个经常使用的LinkedList,插入和删除速度快,但遍历速度慢。
4.queuejava

Map
1.HashMap 能够存重复的值(元素能够为null) 线程不安全,且是无序的。想要线程安全可使用HashTable。但HashTable不能使用null做为键或值 , 想要有序 可使用LinkedHashMap。
2.HashMap和HashTab的区别https://blog.csdn.net/mynameishuangshuai/article/details/52748731
3.区别点https://blog.csdn.net/xiamiflying/article/details/73050577
4.HashMap原理 https://blog.csdn.net/visant/article/details/80045154
https://www.jianshu.com/p/8b372f3a195d/
参考:
https://www.jianshu.com/p/589d58033841
https://blog.csdn.net/world_snow/article/details/79073234数组

线程安全
同步集合类: vector 、HashTable、 同步集合包装类 - Collections.synchronizedMap()和Collections.synchronizedList() 
并发集合类: ConcurrentHashMap 、CopyOnWriteArrayList、CopyOnWriteHashSet安全

同步集合比并发集合会慢得多,主要缘由是锁,同步集合会对整个Map或List加锁
ConcurrentHashMap:把整个Map 划分红几个片断,只对相关的几个片断上锁,同时容许多线程访问其余未上锁的片断。
CopyOnWriteArrayList:CopyOnWriteArrayList、CopyOnWriteArraySet类(没有CopyOnWriteMap实现)容许多个线程以非同步的方式读,当有线程写的时候它会将整个List复制一个副本给它(写在副本),适合读多写少这种场景,这会比使用同步集合更具备可伸缩性。多线程

Collection和Collections的区别
1.java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操做的通用接口方法。List、Set、Vector都继承了他。
2.Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索、线程安全等各类操做。并发

排序
void reverse(List list):反转
void shuffle(List list),随机排序
void sort(List list),按天然排序的升序排序
void sort(List list, Comparator c);定制排序,由Comparator控制排序逻辑
void swap(List list, int i , int j),交换两个索引位置的元素
void rotate(List list, int distance),旋转。当distance为正数时,将list后distance个元素总体移到前面。当distance为负数时,将 list的前distance个元素总体移到后面。ide

查找,替换操做
int binarySearch(List list, Object key), 对List进行二分查找,返回索引,注意List必须是有序的
int max(Collection coll),根据元素的天然顺序,返回最大的元素。 类比int min(Collection coll)
int max(Collection coll, Comparator c),根据定制排序,返回最大元素,排序规则由Comparatator类控制。类比int min(Collection coll, Comparator c)
void fill(List list, Object obj),用元素obj填充list中全部元素
int frequency(Collection c, Object o),统计元素出现次数
int indexOfSubList(List list, List target), 统计targe在list中第一次出现的索引,找不到则返回-1,类比int lastIndexOfSubList(List source, list target).
boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替换旧元素。工具

同步控制
Collections.SynchronizedList()
Collections.SynchronizedSet()
Collections.synchronizedMap().net

备注:
2个数组求全集能够转成hashSet 交集能够用Collections的retainAll 差集能够用Collection的removeAll方法
参考:http://www.javashuo.com/article/p-cxunbgtf-dw.html线程

TreeSet和TreeMap的关系
  与HashSet彻底相似,TreeSet里面绝大部分方法都是直接调用TreeMap方法来实现的。
相同点:

  • TreeMap和TreeSet都是非同步集合,都是线程不安全,可以使用方法Collections工具类方法来实现同步
  • 查询速度都要比Hash集合慢,他们内部对元素的操做时间复杂度为O(logN),而HashMap/HashSet则为O(1)。
  • TreeMap和TreeSet都是有序的集合,也就是说他们存储的值都是排好序的。
    不一样点:
  • 最主要的区别就是TreeSet和TreeMap分别实现Set和Map接口
  • TreeSet只存储一个对象,而TreeMap存储两个对象Key和Value(仅仅key对象有序)
  • TreeSet中不能有重复对象,而TreeMap中能够存在
  • TreeMap的底层采用红黑树的实现,完成数据有序的插入,排序

参考:https://www.cnblogs.com/pony1223/p/7907173.html

PriorityQueu
https://www.cnblogs.com/Elliott-Su-Faith-change-our-life/p/7472265.html

相关文章
相关标签/搜索