JAVA 集合随笔

JAVA中提供了现成操纵数据的集合,使得我们在开发中基本不用自己动手实现复杂的数据结构,来保存和操纵数据。

所以当我们有了基本的数据结构知识,会合理利用JAVA提供的集合就好啦。

JDK1.8;(仅列举常见的)

一:

Iterable接口:三个方法;

        Iterator<T> iterator();

  default void forEach(Consumer<? super T> action) {  
    Objects.requireNonNull(action);
    for (T t : this) {
      action.accept(t);
    }
  }

  default Spliterator<T> spliterator() {
              return Spliterators.spliteratorUnknownSize(iterator(), 0);
  }

Collection接口:主要的三个子接口 List Set Queue。同时继承了Iterable接口。

Map接口:主要的抽象类 AbstractMapAbstractMap 主要的实现类:HashMapTreeMap;

                  LinkedHashMap继承了HashMap;

 

                  接口ConcurrentMap 继承了AbstractMap ; ConcurrentHashMap继承了AbstractMap,实现了ConcurrentMap 。          

Collections:实现一些集合操作的类。

二:

List:主要实现ArrayList(数组实现)LinkedList(链表实现)Vector(线程安全:synchronized关键字实现)Stack(继承Vector)

Set:主要实现HashSet(无序不可重复)TreeSet(红黑树实现)LinkedHashSet

Queuehttps://www.cnblogs.com/lemon-flm/p/7877898.html ;

三:

MapConcurrentHashMap(分段锁);TreeMap(红黑树);HashMap(散列表);Hashtable(synchronized线程安全);Properties(继承Hashtable);

四:

List特点:有序,允许存放重复元素,允许存入null。

ArrayList: 采用数组实现,查询快,删除慢(例:删除数组中间的元素,数组后部的元素全部得往前移动)。

LinkedList:采用链表实现,是一个双向循环列表,具有prev,next,尾元素的next指向头;头元素的prev指向最后一个元素。删除快(直接断开链接即可),查询慢(需要从头部开始遍历查找。)

其中LinkedList还实现了Deque接口,所以可以当成一个非阻塞队列使用,满足先进先出,一端进另一端出的队列特点。

Vector:是采用数组实现的,其中插入,删除,查询等方法全部加上了synchronized关键字,实现线程安全。

 

Set特点:无序,不可存放重复元素,允许存入null。

HashSet:底层是包装一个HashMap实现的。HashSet判断存入的元素是否重复,是通过元素的equals()方法,和hashCode()方法判断的。无序

LinkedHashSet:就是加了链表的HashSet,可以通过链表维护插入顺序,故可以维持“插入顺序”。

TreeSet:底层是包装了一个TreeMap实现的。采用红黑树实现,红黑树本身是一个近似平衡的二叉搜索树。

                且TreeSet  实现了 NavigableSet<E> 接口 ,NavigableSet 继承了 SortedSet<E>,故TreeSet 是一个排序的set。

                Java 中 实现比较:Comparable接口以及Comparator接口。所以TreeSet有两种判断排序的方式,1:存入元素实现Comparable接口。2.传入实现Comparator接口的比较器。

 

Map特点提供了键值的映射,key-value的模式;

HashMap:散列表实现(详见我的另一篇:https://www.cnblogs.com/dev1ce/p/10627395.html)。

未完待续;

                   

 

posted @ 2019-04-06 17:24  dev1ce  阅读(131)  评论(0编辑  收藏  举报