集合类-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. 关于ONION/Wncry勒索病毒

    1.通告 2017年5月12日起,在国内外网络中发现爆发基于Windows网络共享协议进行攻击传播的蠕虫恶意代码,这是不法分子通过改造之前泄露的NSA黑客武器库中“永恒之蓝”攻击程序发起的网络攻击事件 ...

  2. Linux 下安装RabbitMQ 3.6.1

    1.安装erlang 依赖 yum install -y gcc gcc-c++ unixODBC-devel openssl-devel ncurses-devel 2.安装erlang ### 设 ...

  3. C#超简单方法实现两个richtextbox控件滚动条同步滚动

    此文章属于作者原创,转载请注明,谢谢 有时候我们需要实现对照文章等,往往将文本放到两个richtextbox控件中,但是,如果我们需要同步滚动查看,来达到更好的观看效果. 当然,传统的方法重载控件或者 ...

  4. (HTTPS)web 项目如何实现https

    HTTPS实际是SSL over HTTP, 该协议通过SSL在发送方把原始数据进行加密,在接收方解密,因此,所传送的数据不容易被网络黑客截获和破解.本文介绍HTTPS的三种实现方法.方法一 静态超链 ...

  5. WinForm笔记

    Hi All, 分享一个学WinForm时的笔记: 1. 关键字 partial:是部分类,允许将一个类放在多个文件当中. 2. MessageBox()类相当于Console.WriteLine() ...

  6. 用2D动画做遮罩

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  7. Lambda语言篇 —— lambda, 方法引用, 目标类型和默认方法

    本文介绍了Java SE 8中新引入的lambda语言特性以及这些特性背后的设计思想.这些特性包括: lambda表达式(又被成为"闭包"或"匿名方法") 方法 ...

  8. Python内置函数进制转换的用法

    使用Python内置函数:bin().oct().int().hex()可实现进制转换. 先看Python官方文档中对这几个内置函数的描述: bin(x)Convert an integer numb ...

  9. 【easyui】Tab的tools按钮刷新当前tab

    点击刷新按钮,刷新当前Tab选项卡 /** * Name 选项卡初始化 */ $('#home-tabs').tabs({ tools: [{ iconCls: 'icon-reload', bord ...

  10. JSP/Servlet Web 学习笔记 DaySix —— EL表达式

    1)EL从scope中得到参数时可以自动转换类型,因此对于类型转换的限制更加宽松. 2)使用EL表达式,可以简化变量和对象的访问. 3)EL表达式必须以 ${XXXX} 来表示. 4)EL提供点(.) ...