加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java基础 (5) - 集合

发布时间:2020-12-15 07:50:57 所属栏目:Java 来源:网络整理
导读:Java集合大致分为 List、Set、Queue和Map 四种体系, List代表有序、重复的集合;(ArrayList、LinkedList、Vector) Set代表无序、不可重复的集合; (HashSet、LInkedHashSet、TreeSet) Queue Java5增加,代表一种队列的集合 (priorityqueue) Map则代表具
Java集合大致分为 List、Set、Queue和Map 四种体系,
List代表有序、重复的集合;(ArrayList、LinkedList、Vector)
Set代表无序、不可重复的集合; (HashSet、LInkedHashSet、TreeSet)
Queue Java5增加,代表一种队列的集合 (priorityqueue)
Map则代表具有映射关系的集合

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

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个元素整体移到后面。

查找,替换操作
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()

备注:
2个数组求全集可以转成hashSet 交集可以用Collections的retainAll 差集可以用Collection的removeAll方法
参考:https://www.cnblogs.com/a2b1/p/7520099.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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读