Java集合中的接口和常见实现类的总结

一、集合接口
集合有两个基本接口:Collection和Map;Collection有三个子接口,分别为List、Set和Queue.
Collection实现了Iterable接口,该接口使得集合可以使用for each对集合元素进行遍历,Iterable接口中只有一个方法:

Iterator<T> iterator();

而Iterator接口中有四种方法:

boolean hasNext();
E next();
default void remove() {
        throw new UnsupportedOperationException("remove");
    }
default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }

用于实现迭代器的四个功能。
-------------------------------------
1.List接口
List是个有序集合,可以使用迭代器访问元素(必须顺序地依次访问),也可以使用整数索引访问(可以按任意顺序访问)。
具体实现有ArrayList和LinkedList.
2.Set接口
Set中的元素不允许重复,用重写hashCode和equals方法来保证元素不会重复。Set接口有子接口SortedSet
具体实现有HashSet、LinkedHashSet和TreeSet.
--------------------------------------------------------------------------
--------------------------------------------------------------------------

二、实现Collection接口的类
1.LinkedList(底层用链表实现)
LinkedList类有方法listIterator可以返回一个ListIterator接口的实例,ListIterator接口是Iterator的子接口,它有可以反向遍历链表的previous方法以及可以在迭代器前面插入数据的add方法,还有一个可以取代next或previous返回的元素的set方法。
优点:插入删除方便快捷
缺点:查找效率低,因为每一次查找都需要迭代器从头开始遍历。

2.ArrayList(底层用数组实现)
优点:查找效率高
缺点:插入删除效率低,因为无论是插入还是删除,都要重新给元素的编写索引。

3.HashSet(底层用HashMap实现)
HashSet其实就是HashMap,只不过HashSet只用到了键key,没有用到值value,可以从HashSet的源码中看到:

private transient HashMap<E,Object> map;
private static final Object PRESENT = new Object();
public HashSet() {
        map = new HashMap<>();
    }

HashMap的值value被设置为静态常量PRESENT,因此只有键是有意义的。

4.TreeSet(底层用TreeMap实现)
TreeSet实现了NavigableSet接口,而NavigableSet接口是SortedSet的子接口。SortedSet接口提供了用于排序的比较器,而NavigableSet接口提供了一些用来搜索和遍历有序集的方法,如返回小于给定元素的元素中的最大值lower方法等。进入其中的元素会自动地以自然序排列,这种排序是依赖于红黑树实现的。为了能够使元素可以进行比较排序,该元素的类型必须实现了Comparable接口或在构造时提供一个Comparator。

三、实现Map接口的类
1.HashMap(底层实现基于数组、链表和哈希算法)
HashMap中用一个键值节点类Node(K, V)来存放元素,一个Node对象包含自身的键和值、键的哈希码以及下一节点的引用。HashMap中有一个Node类型的数组table,对于新加入的元素,用其键的哈希码对table的长度取余,余数是几就将该元素放在第几个位置上,同余元素用链表连接。
HashMap解决哈希冲突的方式为增加链表的长度。

2.TreeMap
待续……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值