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接口:主要的抽象类 AbstractMap ;AbstractMap 主要的实现类:HashMap;TreeMap;

                  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 ;

三:

Map:ConcurrentHashMap(分段锁);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)。

未完待续;

JAVA 集合随笔的更多相关文章

  1. 关于Java集合

    之前关于java集合认识,虽然理解,但是总是忘记关键点,今明两天写一篇关于集合的随笔

  2. Java基础 随笔整理

    Java基础随笔整理 为了方便阅读,特整理了相关的学习笔记 Java感想 操千曲而后晓声 Java入门 Java其他 Java虚拟机详解 语言入门百题 Java开发工具 · Eclipse Java语 ...

  3. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  4. Scala集合和Java集合对应转换关系

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...

  5. java集合你了解多少?

    用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...

  6. 深入java集合学习1-集合框架浅析

    前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...

  7. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  8. Java集合框架练习-计算表达式的值

    最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...

  9. 【集合框架】Java集合框架综述

    一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...

随机推荐

  1. 微信小程序(应用号)开发资源汇总整理

    开源项目 wechat-weapp-gank - 微信小程序版Gank客户端 wechat-dribbble - 微信小程序-Dribbble wechatApp-demo - 微信小程序 DEMO ...

  2. Openssl pkcs12命令

    一.简介 pkcs12命令能生成和分析pkcs12文件 二.语法 openssl pkcs12 [-export] [-chain] [-inkey filename] [-certfile file ...

  3. [模板]割点(tarjan)

    洛谷P3388 注意:记得tarjan的打法 注意割点的判断条件:子节点个数>2并且为根节点  当它不为根节点时并且low[to]>dfn[u] 判断时是在子节点未被记录的时候 #incl ...

  4. 提高你的Python能力:理解单元测试

    对于程序开发新手来说,一个最常见的困惑是测试的主题.他们隐约觉得“单元测试”是很好的,而且他们也应该做单元测试.但他们却不懂这个词的真正含义.如果这听起来像是在说你,不要怕!在这篇文章中,我将介绍什么 ...

  5. [SoapUI] JsonPath is to JSON what XPath is to XML

    1.通过JsonUtil验证Json的有效性 2.两种方式通过JPath读取Json的内容

  6. es学习-基础增删改查

    创建库 插入数据 修改文档: 查询文档: 删除文档:

  7. Session分布式共享 = Session + Redis + Nginx(转)

    出处:http://www.cnblogs.com/newP/p/6518918.html 一.Session 1.Session 介绍 我相信,搞Web开发的对Session一定再熟悉不过了,所以我 ...

  8. YII2 选择布局

    方案1:控制器内成员变量 public $layout = false; //不使用布局 public $layout = "main"; //设置使用的布局文件 方案2:控制器成 ...

  9. xampp 添加ssl 访问

    编辑php.ini 文件,找到 “;extension=php_openssl.dll” (去掉前面的;号注释) <VirtualHost *:8090> DocumentRoot &qu ...

  10. CodeForces 682A Alyona and Numbers (水题,数学)

    题意:给定两个数 m,n,问你在从1到 n,和从 1到 m中任选两个数加起来是5的倍数,问你有多少个. 析:先计算 m 和 n中有多少个取模5是从0到4的,然后根据排列组合,相乘就得到了小于等于 m ...