导读:本篇博客主要是从整体上了解java的集合框架,然后主要介绍几个自己在项目中用到的结构,比如说:hashtable、hashmap、hashset、arraylist等!

一、宏观预览

从宏观上看,主要包括Iterator接口、Collection接口(List和Set子接口)、Map接口!那么在自己的项目中,我常用到的有list、set和map接口!

二、分别解析

2.1,Iterator接口

Iterator接口主要包含3个方法:hasNext()、next()、remove(),一般在遍历元素的时候用到,通常用到set和map中,而list不用,因为list有自己的索引遍历!关于Iterator

	public static void main(String[] agrs)
{
List<String> list=new ArrayList<String>(); list.add("A");
list.add("B");
list.add("C"); Iterator<String> iter=list.iterator(); while(iter.hasNext()){
System.out.println(iter.next());
}
}

备注:remove()方法移除的是上一次next的值

2.2,Collection接口

2.2.1,List接口

这个接口里面,则主要介绍3个实现类

ArrayList:1,如果在初始化ArrayList的时候没有指定初始化长度的话,默认的长度为10;2,ArrayList在增加新元素的时候如果超过了原始的容量的话,ArrayList扩容ensureCapacity的方案为“原始容量*3/2+1";3,ArrayList是线程不安全的。

LinkedList:1,适合于在链表中间需要频繁进行插入和删除操作;2,随机访问速度较慢,查找一个元素需要从头开始一个一个的找。

Vector:1,Vector和ArrayList基本一致,区别在于Vector中的绝大部分方法都使用了同步关键字修饰;2,默认扩容为原来的两倍

用法总结:

多线程:Vector,频繁的插入或者删除:LinkedList,其他:ArrayList

2.2.2,Set接口

Set中的元素实现了不重复,无序,最多允许有一个null元素对象。不过,虽然Set中元素没有顺序,但是元素在set中的位置是有由该元素的HashCode决定的,其具体位置其实是固定的。

Set接口主要包括三个实现类

HashSet:1,仅能存入一个null值;2,元素位置的底层实现通过了hashcode,具体位置固定。

LinkedHashSet:是Set接口的子接口而且还是HashSet接口的子接口,其和HashSet的主要区别是:在hashcode的基础上,增加了链表结构。

TreeSet:是一种排序二叉树,存入Set集合中的值,会按照值的大小进行相关的排序操作,底层算法基于红黑树实现。

用法总结:

需要排序:TreeSet,其他:HashSet或者LinkedHashSet。至于什么时候用Set接口,请看后续的介绍

2.3,Map接口

Map接口实现的是一组Key-Value的键值对的组合。 Map中的每个成员方法由一个关键字(key)和一个值(value)构成。Map接口不直接继承于Collection接口,因为它包装的是一组成对的“键-值”对象的集合,而且在Map接口的集合中也不能有重复的key出现,因为每个键只能与一个成员元素相对应。

Map接口中,主要包含2个实现类

HashMap(会在接下来的博客中被着重介绍,祭奠曾经用它的时候,死去的亡魂)

TreeMap:对键按序存放,因此它便有一些扩展的方法,比如firstKey(),lastKey()等,还可以从TreeMap中指定一个范围以取得其子Map。

PS:HashMap和HashTable的区别

主要的区别是:是否允许null值,是否线程安全,实现的接口

三、使用总结

总得来说,java的集合框架里面,常用的接口是:collection接口和map接口

需要以键—值对存储的时候:选择map接口,通常也就是hashmap;其他,选用collection接口,但需要注意的是:1,效率比较高的是set接口(如果要排序,则特选TreeSet);2,如果有重复的元素,选择list接口(并发场景下,选择Vector)

下一篇文章,主要介绍HashMap

【java基础 11】java集合框架学习的更多相关文章

  1. Java基础知识:集合框架

    *本文是最近学习到的知识的记录以及分享,算不上原创. *参考文献见链接. 目录 集合框架 Collection接口 Map接口 集合的工具类 这篇文章只大致回顾一下Java的总体框架. 集合框架 ht ...

  2. Java基础---泛型、集合框架工具类:collections和Arrays

    第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...

  3. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  4. java基础(11) -JDBC

    java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...

  5. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  6. JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

    前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...

  7. java基础-学java util类库总结

    JAVA基础 Util包介绍 学Java基础的工具类库java.util包.在这个包中,Java提供了一些实用的方法和数据结构.本章介绍Java的实用工具类库java.util包.在这个包中,Java ...

  8. 黑马程序员:Java基础总结----java注解

    黑马程序员:Java基础总结 java注解   ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! java注解 lang包中的基本注解 @SuppressWarnings ...

  9. Java基础:Java的四种引用

    在Java基础:java虚拟机(JVM)中,我们提到了Java的四种引用.包括:强引用,软引用,弱引用,虚引用.这篇博客将详细的讲解一下这四种引用. 1. 强引用 2. 软引用 3. 弱引用 4. 虚 ...

  10. java基础(二)-----java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

随机推荐

  1. BBS项目需求分析及表格创建

    1.项目需求分析 1.登陆功能(基于ajax,图片验证码) 2.注册功能(基于ajax,基于forms验证) 3.博客首页 4.个人站点 5.文章详情 6.点赞,点踩 7.评论 --根评论 --子评论 ...

  2. 前端常用的jquery代码

    主要是个人在工作中常用到的一些代码,会慢慢添加: 1).enter键时可以触发某些事件,比如登陆事件: $('#loginform').bind('keypress',function(event){ ...

  3. Linux下环境搭建(二)——jenkins+gitlab配置

    配置jenkins+gitlab环境,需要依托java环境,在之前的博文中,已配置好java环境,所以可以直接搭建这两个工具的环境即可. jenkins配置 jenkins的配置方法,在之前windo ...

  4. Jenkins环境搭建(6)-修改自动化测试报告的样式

    写在最前: 我遇到一个问题,就是导出数据时,接口返回的数据是乱码,乱码如下图所示.问了开发,说是byte数据.这种情况,将response Data数据写入到报告中的话,在jenkins上运行时,提示 ...

  5. 关于Retrofit + RxJava 的使用

    年前一个月到现在,一直都在忙一个项目.项目使用的三方框架还是蛮多的. 下面来总结一下自己使用Retrofit + RxJava的知识点吧. (以下讲述从一个请求的最初开始) 1.首先定义一个RxMan ...

  6. windows命令行快速启动软件

    windows桌面上太多的应用程序快捷方式很影响美观,于是寻思使用类似Linux系统中命令行的方式来启动软件. 只需要3步: 1.建立一个目录A,用来存放快捷方式.比如,建立D:\path.并复制快捷 ...

  7. LeetCode 3Sum Closest 最近似的3sum(2sum方法)

    题意:找到最接近target的3个元素之和,并返回该和. 思路:用2个指针,时间复杂度O(n^2). int threeSumClosest(vector<int>& nums, ...

  8. 基于51单片机个LCD1602的万年历程序

    小白 第一次跟新博客 基于51单片机和LCD1602的万年历程序 可实现走时和调时功能 有简单的1602菜单制作 欢迎大家交流 LCD1602和51单片机的连接方法 RS = P3^5; //数据/命 ...

  9. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

  10. 【工具篇】在.Net中实现HTML生成图片或PDF的几种方式

    前段时间由于项目上的需求,要在.Net平台下实现把HTML内容生成图片或PDF文件的功能,特意在网上研究了几种方案,这里记录一下以备日后再次使用.当时想着找一种开发部署都比较清爽并且运行稳定的方案,但 ...