javaSE基础学习笔记 day16 Collection List Set 接口 以及相关实现类

Collection 接口中的常用方法

  1. 添加:
    ①add(Object obj);
    ②addAll(Collection coll);
  2. 获取有效元素的个数:int size();
  3. 清空集合: void clear();
  4. 是否是空集合:boolean isEmpty();
  5. 是否包含某个(些)元素:
    ①boolean contains(Object obj);
    ②boolean containsAll(Collection c);
  6. 删除某个(些)元素:
    ①boolean remove(Object obj);
    ②boolean removeAll(Collection coll);
  7. 取两个集合的交集:boolean retainAll(Collection c);
  8. 集合是否相等:boolean equals(Object obj);
  9. 转成对象数组:Object[] toArray();
  10. 返回Iterator接口的实例化,指向集合第一个元素的前一个位置,用于集合遍历:iterator()

Iterator接口常用方法

  1. hasNext():是否有下一个元素
  2. next():
    ① 指针先向下移动一格位置。
    ② 返回指针所指的对象。
  3. remove():删除迭代器指向的对象。

List接口以及其实现类

简介:是 Collection 的子接口,List集合类中元素有序,且可重复

List接口中常用方法:

  1. void add(int index, Object ele):在index位置插入ele元素。
  2. boolean addAll(int index, Collection eles):从index位置开始将eles中的所有元素添加进来。
  3. Object get(int index):获取指定index位置的元素。
  4. Object remove(int index):移除指定index位置的元素,并返回此元素。
  5. Object set(int index, Object ele):设置指定index位置的元素为ele。

ArrayList

简介:线程不安全的,效率高,底层是通过 Object[] 数组实现的。

  1. 在 JDK7.0 中,通过 new ArrayList() 创建对象时,底层创建一个 长度为 10 的数组,如果在添加的过程中导致数组容量不够,则扩容为原来的 1.5 倍,同时将原有的数据复制到新的数组中。
    建议用带参构造器指名初始容量,避免触发扩容导致效率变低。
  2. JDK8.0 的变化:通过new ArrayList() 创建对象时,底层并没有创建长度为 10 的数组,当第一次 add() 时,底层才创建了长度为 10 的数组,扩容机制与 JDK7.0 相同。

LinkedList

简介:底层通过双向链表实现,对于频繁插入,删除的操作效率高。

Vector

简介:比较老的实现类,线程安全的,效率低,已经不怎么使用。

Set接口

简介:是 Collection 的子接口,Set 接口中没有定义额外的方法,全部使用从 Collection 继承而来。Set 中的元素是无序的,不可重复的

什么是无序性?
不等于随机性,存储的数据在底层数组中不是按照 index 递增存储的,而是按照 hash 值存储的。
什么是不可重复性?
保证新添加的元素,用 equals() 方法和已有元素判断时不返回 true ,相同的元素只能在 Set 中存一个。

HashSet

简介:线程不安全的,也可以存 null。
添加元素的过程:(重点)
假设现在要添加元素 a ,先调用 a.hashCode() 计算 a 的哈希值,然后通过某种算法运算出应在 HashSet 底层数组中存放的位置
①如果此位置无元素,则添加成功。
②如果此位置已经有元素,则用此对象 a 与该位置其他元素比较哈希值,若都不同则添加成功。
③如果此位置有其他元素与 a 的哈希值相同,则调用 a.equals() ,判断是否为同一对象,如为 false,则添加成功。
④其他情况均为添加失败。

注意: 在JDK7.0时,a 放在数组中,指向原来的元素(头插)
JDK8.0中,a 放在链表尾,原来的元素指向 a (尾插)

要求:在 Set 中添加的数据,其所在类一定要重写 equals() 和 hashCode()。

LinkedHashSet

简介:为 HashSet 的子类,可以在遍历时按照添加时的顺序遍历。
只是在 HashSet 的基础上,在添加元素的同时,还在元素间维护了一个双向链表,使得对于频繁的遍历操作,该集合效率很高。

TreeSet

简介:可按照添加对象的指定属性,进行排序。

  1. 在 TreeSet 中添加的元素,必须是相同类的对象。
  2. 两种排序方式:自然排序,定制排序。
  3. 自然排序:在 TreeSet 中,判断元素相同的标准是 compareTo(Object obj) 返回值是否为 0 ,而不再是 equals()。
  4. 定制排序:在创建 TreeSet 时,通过将实现 Comparator 接口类的对象作为参数传进构造函数中,判断元素相同的标准是,compare(Object o1, Object o2) 返回值是否为 0 .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值