JavaSE(4)——Collection集合

java中的集合(Collection)

1. 为什么需要Collection
  1. java是面向对象的语言,需要对对象进行一系列操作

  2. 为了操作一堆对象,就需要把这么多对象存储起来

  3. 存储时就需要一个装对象的容器

  4. 因此,JDK中提供了集合(Collection)来处理若干对象

2. 数组和集合的区别
  1. 长度区别

    • 数组长度固定
    • 集合长度可变化
  2. 内容不同

    • 数组中只能存储同一种类型的元素
    • 集合可以存储不同类型的元素(一般情况下只存相同类型元素)
  3. 元素数据类型

    • 数组中可以存基本数据类型,也可以存引用数据类型
    • 集合只能存引用数据类型(比如int 类型,需要存Integer)
3.Collection中重要的子类

在这里插入图片描述

4. Collection的功能
  1. 添加功能

    • boolean add(Object obj) 添加一个元素
    • boolean addAll(Collection c) 添加一个集合的元素
  2. 删除功能

    • void clear() 移除所有元素
    • boolean remove(Object o) 移除一个元素
    • boolean removeAll(Collection o) 移除一个集合的元素
  3. 判断功能

    • boolean contains(Object o) 判断一个元素是否存在
    • boolean contains(Collection c) 判断集合中是否全部包含某集合的元素
    • boolean isEmpty() 判断集合是否为空
  4. 获取功能

  • Iterator<E> iterator() 迭代器
  1. 长度功能
  • int size() 元素的个数
  1. 交集功能

    • boolean retainAll(Collection c) 溢出此collection中未包含在指定collection中的所有元素。

      集合A和集合B做交集,最终的结果保存在集合A,返回值表示的是A是否发生过变化。

5. 迭代器介绍

​ 在Collection类中,它继承了Iterable接口,而Iterable接口继承了Iterator类。

​ Iterator类中一共有三个方法,next,hasNext,remove。

​ 这些方法都是在Collection的实现类中实现的,根据实现类的数据结构不同,迭代器的实现方法也不同

6. Set实现类
HashSet
public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable{
    
    static final long serialVersionUID = -5024744406713321676L;

    private transient HashMap<E,Object> map;

    private static final Object PRESENT = new Object();

   
    public HashSet() {
        map = new HashMap<>();
    }
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
    public int size() {
        return map.size();
    }
     public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }
    public void clear() {
        map.clear();
    }
    public boolean isEmpty() {
        return map.isEmpty();
    }
    public Iterator<E> iterator() {
        return map.keySet().iterator();
    }
}

HashSet底层用了HashMap做存储结构,将元素当做键,每次存入同一个Object类做值,实现Set中元素不重复的特性。

LinkedHashSet

LinkedHashSet底层使用哈希数组和链表做存储结构,线程不安全

TreeSet
public class TreeSet<E> extends AbstractSet<E>
    implements NavigableSet<E>, Cloneable, java.io.Serializable{
    
    private transient NavigableMap<E,Object> m;

    private static final Object PRESENT = new Object();

    public TreeSet() {
        this(new TreeMap<E,Object>());
    }
    
    TreeSet(NavigableMap<E,Object> m) {
        this.m = m;
    }
}

TreeSet底层使用了TreeMap做存储(自平衡二叉树),保证了元素的有序,用Map的键存Set中的元素,实现了树结构的Set。

7. List实现类

相比Set集合,List集合的特点就是,有序且可重复。

和Set集合不同的一点,List集合中,使用了其独特的迭代器(ListIterator),其中有向前遍历,向后遍历,set和add方法。

常用的List集合实现类:

  • ArrayList

    底层是数组结构,线程不安全。

  • LinkedList

    底层是链表结构,线程不安全。

  • Vector

使用了其独特的迭代器(ListIterator),其中有向前遍历,向后遍历,set和add方法。

常用的List集合实现类:

  • ArrayList

    底层是数组结构,线程不安全。

  • LinkedList

    底层是链表结构,线程不安全。

  • Vector

    底层是数组结构,线程安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值