集合类-Collecion

Collection接口

常用方法

    //添加新元素
    boolean add (E element);
    //返回迭代器
    Iterator<E> iterator();

Iterator接口

    public interface Iterator<E>{
        E next();
        boolean hasNext();
        //移除Iterator最近的一个获取的元素 所以要调用next获取过元素才能调用remove删除
        void remove();
    }

集合的添加迭代

    Collection c = ......;//随便一种Collection实现
    Iterator it = c.iterator();
    while(it.hasNext()){
        //do something with it.next();
    }

    //java 5.0+ 可以使用for each
    for(Element e: c){
        //do something with e;
    }

AbstractCollecion-实现了iterator,size等方法

Collection实现集合

实现类 解析
ArrayList 可以动态增长和缩减的索引序列
LinkedList 可以在任何位置进行高效插入删除操作的序列
ArrayDeque 循环数组实现的双端队列
HashSet 没有重复元素的无序集合
TreeSet 有序集合
EnumSet 包含枚举类型的集合
LinkedHashSet 可以记住元素插入次序的集合
PriorityQueue 允许高效删除最小元素的集合
HashMap 存储键值关联的数据结构
TreeMap 键值有序排列的映射表
EnumMap 键值属于枚举类型的映射表
LinkedHashMap 可以记住键值添加次序的映射表
WeakHashMap 其值没用的之后,可以自动被垃圾回收期回收的映射表
IdentityHashMap 一种使用==(不使用equals)来比较键值的映射表

队列-queue

先进先出

队列尾添加元素,队列头删除元素,队列个数查询

实现方式

  • 循环数组实现(容量有限)
  • 链表实现

链表

链表是一个有序集合

实现ListIterator接口

    public interface ListIterator<E> extends Iterator<E>{
        E next();
        boolean hasNext();
        //移除Iterator最近的一个获取的元素 所以要调用next获取过元素才能调用remove删除
        void remove();

        //新添加的接口
        //插入到下一个元素之前
        void add();
        //移到上一个元素
        E previous();
        boolean hasPrevious();

        E getFirst();
        E getLast();
        E removeFirst();
        E removeLast();
    }

demo

    /**
     * 链表是一个有序集合
     */
     LinkedList<String> llist = new LinkedList<String>();
     llist.add("s1");
     llist.add("s2");
     llist.add("s3");
     System.out.println(llist);//=>[s1, s2, s3]
     /**
      * Iterator的使用
      */
     Iterator<String> it = llist.iterator();
     System.out.println(it.next());//=>s1
     it.remove();//=>移除s1
     System.out.println(llist);//=>[s2, s3]
     /**
      * ListIterator的使用
      */
     ListIterator<String> lit =llist.listIterator();
     System.out.println(lit.next());//=>返回了Ss2
     lit.add("1");//插入到下一个元素(s3)之前
     System.out.println(llist);//=>[s2, 1, s3]

数组列表-ArrayList

有序集合,可以使用get,set方法设定指定位置元素

散列集-HashSet

为每个对象计算一个散列码(整数)

树集-TreeSet

有序的散列集

要实现Comparable接口来实现排序

双端队列-ArrayDeque,LinkedList

可以同时操作头尾的元素

优先级队列-PriorityQueue

元素任意顺序插入,都会按照排序顺序排列,remove方法总会获得优先级最低的元素

映射表-HashMap,TreeMap

若散列映射表-WeakHashMap

自动回收没用的key值

链接散列集和链接映射表-LinkedHashList LinkedHashMap

可以记住插入的顺序

枚举集和映射集-EnumSet

标识散列映射表-IdentityHashMap

java基础(8) -集合类-Collecion的更多相关文章

  1. 面试【JAVA基础】集合类

    1.ArrayList的扩容机制 每次扩容是原来容量的1.5倍,通过移位的方法实现. 使用copyOf的方式进行扩容. 扩容算法是首先获取到扩容前容器的大小.然后通过oldCapacity (oldC ...

  2. 【java基础之jdk源码】集合类

    最近在整理JAVA 基础知识,从jdk源码入手,今天就jdk中 java.util包下集合类进行理解 先看图 从类图结构可以了解 java.util包下的2个大类: 1.Collecton:可以理解为 ...

  3. Java基础__Java中自定义集合类

    Java基础__Java中集合类 传送门 自定义MyArrayList集合实现:增加数据.取数据.查看集合中数据个数方法 package com.Gary; public class MyArrayL ...

  4. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  5. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  6. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  7. Java基础应用

    Java集合类解析 List.Map.Set三个接口,存取元素时,各有什么特点? List 以特定次序来持有元素,可有重复元素.Set 无法拥有重复元素,内部排序.Map 保存key-value值,v ...

  8. Java基础知识学习(一)

    部门接了新项目,后台使用Java框架play framework,前端是html,前后台通过rest交互,能够支持多端的互联网架构. 因为之前没有Java基础,前端使用的也很少,决定深入学习一下Jav ...

  9. java基础要点

    Java语言是现在比较常用的编程语言,因为Java语言可以编写桌用程序,也可以编写web程序,还能编写嵌入式程序.这是由于相比脚本语言,Java 的运行速度要快.而对于底层语言,Java与平台无关,可 ...

随机推荐

  1. Java 多线程详解(三)------线程的同步

    Java 多线程详解(一)------概念的引入:http://www.cnblogs.com/ysocean/p/6882988.html Java 多线程详解(二)------如何创建进程和线程: ...

  2. 字符串时间和NSDate相互转换的坑

    项目中服务器传回来的时间是这种格式的 Sep 5, 2016 6:59:05 PM 现在要将这段字符串转换成 2016-09-05 06:59 被坑的地方有2个点 服务器传回来的英文的Sep,调试的时 ...

  3. LVM学习

    LVM Logical Volume Manager Volume management creates a layer of abstraction over physical storage, a ...

  4. Weka算法介绍

    RWeka (http://cran.r-project.org/web/packages/RWeka/index.html) : 1) 数据输入和输出 WOW():查看Weka函数的参数. Weka ...

  5. ECS_8080端口连接拒绝问题排查

    原文链接 用户ECS网络设置 上图是用户ECS的网络示意图: ecs处于vpc网络下 ecs加入了一个安全组,该安全组出入方向均开放8080端口 ecs有两个网卡,一个私网主网卡(有虚线的网卡),一个 ...

  6. javascript的八张图

  7. Day1 - Python基础1 Python介绍、基本语法、流程控制习题集

    1.打印Hello World! print("Hello World!") 或 name="你好,世界!" print(name) 2.声明变量:打印name ...

  8. Akka(7): FSM:通过状态变化来转换运算行为

    在上篇讨论里我们提到了become/unbecome.由于它们本质上是堆栈操作,所以只能在较少的状态切换下才能保证堆栈操作的协调及维持程序的清晰逻辑.对于比较复杂的程序流程,Akka提供了FSM:一种 ...

  9. oracle 11g 完全卸载方法

    网上好多卸载教程都前篇一律,但很多卸完重装都有问题,卸了几次装了几次,就特地总结整理一下 另外说一句:在完全删除(或者叫卸载)oracle时,没有必要特别意oracle提示问题,只要把oracle痕迹 ...

  10. rem的js

    html { font-size : 20px; } @media only screen and (min-width: 401px){ html { font-size: 25px !import ...