java集合框架-Collection

Collection接口

Collection是存储单列数据的集合,主要有两个分支List、Set。
首先介绍一下Collection的常用抽象方法:

方法类型方法名及说明
booleanadd(E e)、 addAll(Collection<? extends E> c)添加指定元素或一组元素
booleancontains(Object o) 、containsAll(Collection<?> c)如果此集合包含指定的元素,则返回 true。调用参数类型的equals()与集合中数据进行比较。
voidclear() 删除集合中所有元素。
booleanequals(Object o)判断两个集合是否相等。
inthashCode()返回集合的哈希值。
booleanisEmpty()返回集合是否为空。
booleanremove(Object o) 、removeAll(Collection<?> c) 从该集合中删除指定元素(如果存在)。若存在多个object,删除第一个。
booleanretainAll(Collection<?> c) 仅保留两个集合的交集。
intsize()返回集合元素个数。
Object[]toArray() 返回一个包含此集合中所有元素的数组。
Iterator< E >iterator() 返回此集合中的元素的迭代器。

解释一下Iterator接口,主要用于遍历Collection的迭代器。
有三个常用方法next()(先下移再返回下移后集合上的元素,如果到最后一个元素依旧next(),则会报异常NoSuchElementException)、hasNext()(判断是否存在下一个与元素,存在返回true,不存在返回false)、remove()(删除当前迭代到的元素,如果连续两次调用remove就会报异常IllegalStateException);

List接口

List接口是Collection接口的一个子接口,存储的数据可以重复并且有顺序。有三个常用实现类ArrayList、LinkedList、Vector。
除了父接口的抽象方法外,List也有自己的一些抽象方法。

方法类型方法名及说明
voidadd(int index, E element)、addAll(int index, Collection<? extends E> c) 将指定的元素或集合插入此列表中的指定位置。
Eget(int index) 返回此列表中指定位置的元素。
intindexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。
intlastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。
Eremove(int index) 删除该列表中指定位置的元素。
Eset(int index, E element) 用指定的元素替换此列表中指定位置的元素。
List< E >subList(int fromIndex, int toIndex) 返回此列表中指定的 fromIndex (含)和 toIndex之间的视图。
ListIterator< E >listIterator() 、 listIterator(int index) 返回列表中的列表迭代器(从头或者从指定位置开始)。

ArrayList实现类

底层是Object数组,线程不安全,增删慢,查询快。
JDK7之前:new时创建长度为10的数组,扩容默认为1.5倍(右移1位加上本身长度,同时复制到新数组中,为避免扩容带来的消耗,可new时使用带参的构造器)
JDK8之后:第一次添加数据时才会将数组创建,new时仅将数组初始化为{},后续的添加扩容不变。

LinkedList实现类

底层是双向链表,线程不安全,增删快,查询慢。
内部声明了Node类型的first、last变量,可以控制添加或删除数据到头部或者尾部等操作。
部分方法:

方法类型方法名及说明
voidaddFirst(E e)、addLast(E e) 在该列表开头或尾部插入指定的元素。
EgetFirst() 、getLast() 返回列表的第一个或者最后一个元素。

Vector实现类

底层是Object数组,线程安全(使用的是在方法上加synchronized),扩容为原来2倍,其他与ArrayList类似。JDK1.0时出现,不建议使用。

Set接口

Set接口是Collection接口的一个子接口,存储的数据不可以重复并且没有顺序。有三个常用实现类HashSet、LinkedHashSet、TreeSet。没有新增方法。

HashSet实现类

底层就是HashMap,值存储在map的key上,value是一个new Object()常量。

LinkedHashSet实现类

是HashSet的子类,底层是LinkedHashMap。对于频繁遍历操作,效率高于HashSet。

TreeSet:

底层是TreeMap,可以按照添加的对象的指定属性进行排序。有序,查询比List快。不能添加不同类的对象否则报ClassCastException。
排序规则:
1.无参构造器,会自动排序,可通过实现Comparable接口(如果compareTo()返回0会导致判断为重复数据)。

public TreeSet() {
        this(new TreeMap<E,Object>());
    }
public TreeMap() {
        comparator = null;
    }

2.创建一个Comparator对象传入TreeSet的带参构造器中进行排序。

public TreeSet(Comparator<? super E> comparator) {
        this(new TreeMap<>(comparator));
    }
public TreeMap(Comparator<? super K> comparator) {
        this.comparator = comparator;
    }

此文仅为学习记录之用,若有不足,欢迎指正,会随后续学习更改不足之处。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值