集合类-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. 深度解析MySQL启动时报“The server quit without updating PID file”错误的原因

    很多童鞋在启动mysql的时候,碰到过这个错误, 首先,澄清一点,出现这个错误的前提是:通过服务脚本来启动mysql.通过mysqld_safe或mysqld启动mysql实例并不会报这个错误. 那么 ...

  2. 学java网络编程的心得体会

    网络编程简单思路 一.发送端1创建udp服务,通过DatagramSocket对象;2确定数据,封装成包DatagramPacket(byte[] buf, int length, InetAddre ...

  3. 开涛spring3(8.1) - 对ORM的支持 之 8.1 概述

    8.1  概述 8.1.1  ORM框架 ORM全称对象关系映射(Object/Relation Mapping),指将Java对象状态自动映射到关系数据库中的数据上,从而提供透明化的持久化支持,即把 ...

  4. Flight学习(一)

    翻看git时看到有新消息提示,点进去第一个就是Flight,那么今天就简单来翻译和了解一下这个框架吧,锻炼下自己的英文文档阅读能力,同时也熟悉下JavaScript.时间太赶,难免出现翻译失误和错误, ...

  5. MVC+Bootstrap+Drapper使用PagedList.Mvc支持多查询条件分页

    前几天做一个小小小项目,使用了MVC+Bootstrap,以前做分页都是异步加载Mvc部分视图的方式,因为这个是小项目,就随便一点.一般的列表页面,少不了有查询条件,下面分享下Drapper+Page ...

  6. VR全景:vr元年过后,这些企业如何发动“vr+”应用引擎?

    2016年,VR可谓是四处衍生.从如痴如迷的游戏行业到喜闻乐见的影视行业,再到医疗.军事.房地产,随便呼出一个"+",VR便能左右逢源,VR+各行各业,俨然成为一种标配.最近,Ma ...

  7. springcloud(十):服务网关zuul

    前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...

  8. D. Powerful array

    D. Powerful array 题意 给定一个数列:a[i] (1<= i <= n) K[j]表示 在区间 [l,r]中j出现的次数.有t个查询,每个查询l,r,对区间内所有a[i] ...

  9. 分享两个网址,一个是使用mssql自带的跟踪工具和分析工具

    http://www.cnblogs.com/Fooo/archive/2013/02/19/2916789.html 使用mssql自带的跟踪工具和分析工具 http://blog.csdn.net ...

  10. 在Quo.js下Tap和singleTap的区别

    前两天上网搜开发手机页面的JS,看到了Quo.js下载下来后来看了一下,支持的触屏手势挺多的,在一般的开发中应该够用了,更让我喜欢它的一点是它跟JQ差不多(虽然功能不如JQ强大但是语法基本一致).这就 ...