从零开始学Java-原生工具-Collections

前言

工欲善其事必先利其器,要想用好java必须先知道java有什么!

Collections

java提供的操作集合,更贴切的应该说容器,的工具,提供很多容器(Collection+Map)操作。

  • 容器封装

    1. 空容器:

      方法方法描述
      迭代器:
      java.util.Collections#emptyEnumeration老式迭代器,现在已经被Interable基本替代了
      java.util.Collections#emptyIteratorIterator
      java.util.Collections#emptyListIteratorListIterator
      集合:
      java.util.Collections#emptyListList
      java.util.Collections#emptySetSet
      java.util.Collections#emptySortedSetSortedSet
      java.util.Collections#emptyNavigableSetNavigableSet
      Queue
      Map:
      java.util.Collections#emptyMapMap
      java.util.Collections#emptySortedMapSortedMap
      java.util.Collections#emptyNavigableMapNavigableMap
    2. 构建由单一元素构成的集合

      方法方法描述
      java.util.Collections#singletonListList
      java.util.Collections#singletonSet
      java.util.Collections#singletonMapMap
    3. 元素检查容器

      方法方法描述
      集合:
      java.util.Collections#checkedCollectionCollection
      java.util.Collections#emptySetSet
      java.util.Collections#checkedSortedSetSortedSet
      java.util.Collections#checkedNavigableSetNavigableSet
      java.util.Collections#checkedListList
      java.util.Collections#checkedQueueQueue
      Map:
      java.util.Collections#checkedMapMap,key和value都会校验类型
      java.util.Collections#checkedSortedMapSortedMap
      java.util.Collections#checkedNavigableMapNavigableMap
    4. 不可修改容器

      方法方法描述
      集合:
      java.util.Collections#unmodifiableCollectionCollection
      java.util.Collections#unmodifiableSetSet,增加一些方法,其父类还是unmodifiableCollection
      java.util.Collections#unmodifiableSortedSetSortedSet,与Set类似,父类是UnmodifiableSet
      java.util.Collections#unmodifiableNavigableSetNavigableSet,父类是UnmodifiableSortedSet
      java.util.Collections#unmodifiableListList
      Queue
      Map:
      java.util.Collections#unmodifiableMapMap,key和value都会校验类型
      java.util.Collections#unmodifiableSortedMapSortedMap
      java.util.Collections#unmodifiableNavigableMapNavigableMap
    5. 同步容器:内部采用synchronized关键字同步

      方法方法描述
      集合:
      java.util.Collections#synchronizedCollectionCollection,
      java.util.Collections#synchronizedSetSet,增加一些方法,其父类还是SynchronizedCollection
      java.util.Collections#synchronizedSortedSetSortedSet,与Set类似,父类是SynchronizedSet
      java.util.Collections#synchronizedNavigableSetNavigableSet,父类是SynchronizedSortedSet
      java.util.Collections#synchronizedListList,父类是SynchronizedCollection
      Queue
      Map:
      java.util.Collections#synchronizedMapMap
      java.util.Collections#synchronizedSortedMapSortedMap,父类SynchronizedMap
      java.util.Collections#synchronizedNavigableMapNavigableMap,父类SynchronizedSortedMap

    小结:Collections提供的同步容器虽好,但是由于它是将容器的每一个方法都使用synchronized关键字进行同步,所以在性能上并不占优势。还是应该尽量从自己的实际业务场景出发,选择更合适的同步容器。例如:在读多写少的业务场景,同步容器可以选择CopyOnWriteArrayList。

  • 容器操作

  1. 集合搜索
    a. 用二分法搜索指定key的元素下标

    java.util.Collections#binarySearch

    b. 查找某个key出现的次数/频率

    java.util.Collections#frequency

    c. 查找极值

    极大值
    java.util.Collections#max
    极小值
    java.util.Collections#min

    d. 集合关系

    查找target在source的第一次出现的位置下标,不存在返回-1
    java.util.Collections#indexOfSubList(List<?> source, List<?> target)
    查找target在source的最后一次出现的位置下标,不存在返回-1
    java.util.Collections#lastIndexOfSubList(List<?> source, List<?> target)
    集合是否存在交集
    java.util.Collections#disjoint(Collection<?> c1, Collection<?> c2)

  2. 集合修改
    a. 排序:直接调用list的排序(list的实现底层都是基于Arrays的归并排序法)

    默认为自然升序,即 1,2,3…
    java.util.Collections#sort(java.util.List)
    倒叙排列通常需要给一个比较器,而Collections同样提供了倒序的比较器
    java.util.Collections#reverseOrder()
    java.util.Collections#sort(java.util.List, java.util.Comparator<? super T>)

    b. 集合元素顺序调整

    将集合旋转distance距离,例如 1,2,3,4,5 2 => 4,5,1,2,3
    java.util.Collections#rotate(List<?> list, int distance)
    打乱顺序
    java.util.Collections#shuffle(java.util.List<?>)
    将元素顺序反转
    java.util.Collections#reverse

  3. 集合元素修改

    交换两个位置上的元素
    java.util.Collections#swap(java.util.List<?>, int, int)
    java.util.Collections#swap(java.lang.Object[], int, int)
    将集合中所有等于oldVal的元素,替换成newVal
    java.util.Collections#replaceAll(List list, T oldVal, T newVal)
    将集合中的元素全部替换为obj
    java.util.Collections#fill(List<? super T> list, T obj)

  4. 集合拷贝

    将迭代器的元素拷贝到ArrayList
    public static ArrayList list(Enumeration e)
    将src中的元素替换拷贝到dest(dest前面的元素都是来自src)
    public static void copy(List<? super T> dest, List<? extends T> src)
    构造一个由o拷贝n次组成的集合
    public static List nCopies(int n, T o)

  5. 容器转换

    将双端队列转为单向队列
    java.util.Collections#asLifoQueue
    将Map转为Set
    java.util.Collections#newSetFromMap

  6. 从集合获取一个Enumeration迭代器

    java.util.Collections#enumeration

总结Collections提供的工具

  • 容器封装
    1. 空容器
    2. 构建由单一元素构成的集合
    3. 元素检查容器
    4. 不可修改容器
    5. 同步容器:内部采用synchronized关键字同步
  • 容器操作
    1. 集合搜索
      方法作用
      用二分法搜索指定key的元素下标
      查找某个key出现的次数/频率
      查找极值
      集合关系(子集/交集)
    2. 集合修改
      方法作用
      排序:直接调用list的排序(list的实现底层都是基于Arrays的归并排序法)
      集合元素顺序调整
    3. 集合元素修改(交换/替换)
    4. 集合拷贝
    5. 容器转换
      方法作用
      将双端队列转为单向队列
      将Map转为Set
    6. 从集合获取一个Enumeration迭代器
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值