[重学Java基础][Java内置工具类][Part.2] Collections工具类

[重学Java基础][Java内置工具类][Part.2] Collections工具类

===========

Collection与Collections

Collection是集合的最顶层接口,提供了对集合对象进行基本操作的通用接口方法。为各种具体的集合提供了最大化的统一操作方式。
Collentions是一个工具类。它包含各种有关集合操作的静态多态方法,此类的构造方法为private,不能被实例化。

Collections工具类的方法

基于Java 9

根据是否有返回值 可以把Collections工具类的方法
大体上分为两类 一组是返回集合对象的方法
另一组是对传入的集合对象操作的方法

返回集合对象的方法

**这些方法都返回一个重新包装的集合对象 也称之为视图对象
提供了许多重要功能 减少了繁琐的数据结构构建开销**

空集合

空集合指的是没有元素在这些集合中,特别需要主要的是返回的集合都是只读的。只要更改值就会抛出UnsupportedOperationException异常 如果获取元素则抛出下标越界异常


Collections.EMPTY_LIST,Collections.emptyList()//返回只读 的空LIST 集合 
Collections.EMPTY_MAP,Collections.emptyMap()//返回只读 的空MAP集合 
Collections.EMPTY_SET,Collections.emptySet()//返回只读 的空SET集合

其实底层有一个Empty*类,就是返回一个新的实例。

看源码 以emptyList为例

 返回一个内部类 EmptyList
 public static final <T> List<T> emptyList() {
        return (List<T>) EMPTY_LIST;
    }

EmptyList和ArrayList 一样 都实现了RandomAccess接口 扩展AbstractList抽象类
不一样的是EmptyList内部没有实际的数据序列
所有方法都返回空或者0
 private static class EmptyList<E>
  extends AbstractList<E>
  implements RandomAccess, Serializable {
   
  private static final long serialVersionUID = 8842843931221139166L;
  ……

空集合主要用于一些需要返回集合的场合

传统的 返回一个新的集合或者匿名集合 无形中增加了内存占用

return new ArrayList<T>();

而返回空集合

return Collections.emptyList();

由源码可知是Collections类的一个static内部类的引用 无论有多少个引用 所占内存都是一样的

单元素集合

Collections中的单元素集合指的是集合只有一个元素而且集合只读。

Collections.singletonList //用来生成只读 的单一元素的List 
Collections.singletonMap //用来生成只读 的单Key和Value组成的Map 
Collections.singleton //用来生成只读 的单一元素的Set

创建一个String泛型限定的单一元素集合

        String string="This is a string";

        List<String> list=Collections.singletonList(string);

此单元素集合不能新增 移除元素 否则会抛出异常

其实底层有一个singleton*类,调用方法就返回一个实例

源码 SingletonList为例

private static class SingletonList<E>
        extends AbstractList<E>
        implements RandomAccess, Serializable {
   

        private static final long serialVersionUID = 3093736618740652951L;
        相比空集合 单元素集合有了实际的数据序列
        private final E element;
        ……
    }

单元素集合同样实现了RandomAccess接口 扩展AbstractList抽象类
但是重写的集合方法 不支持所有对集合对象的改变操作

运用单元素集合 可以便捷的从集合中移除重复元素

示例

List<String> list = new ArrayList<String>();
list.add("abc");
list.add(null);
list.add("def");
list.removeAll(Collections.singletonList(null));
System.out.println(list);  //[abc, def]

只读集合

这些集合一旦初始化以后就不能修改,任何修改这些集合的方法都会抛出UnsupportedOperationException异常。

Collections.unmodifiableCollection()
Collections.unmodifiableList()
Collections.unmodifiableMap() 
Collections.unmodifiableSet() 
Collections.unmodifiableSortedMap() 
Collections.unmodifiableSortedSet() 

以上方法都顾名思义

创建一个只读的链表

List 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值