一.数组与集合的区别

  数组和集合都是用来存储对象的容器,但是,数组只能储存基本数据类型的对象,且长度不可变;而集合是储存引用数据类型的对象,且长度可变,所以,在不知对象数量的具体数值时一般用集合来存储。

二.javaSE阶段下的层次图

  

  从层次图可以来看,集合类是以接口来实现的,其中<E>和<K,V>为泛型,简单来说,泛型就是所引用的对象类型,集合主要分为单列集合和双列集合,Iterator迭代器只是集合的运用,从而实现了Iterator接口,用于遍历集合中元素的接口,主要运用无序集合跟增强for循环联合使用。

三.Iterator迭代器和增强for循环

  1.Iterator接口主要包含三种方法:①.hasNext();//是否还有下一个元素;②.next();//返回下一个元素;③.remove();//删除当前元素。

  2.增强for循环:

  ①.从jdk1.5出现的新特性,其作用为简化迭代器的书写格式(注:增强for循环的底层还是使用了迭代器遍历。),用于实现了Iterable接口的对象或者是数组对象;

  ②.增强for循环的格式,for(数据类型  变量名  :遍历的目标){    }

  ③.注意的事项:

  • 增强for循环底层也是使用了迭代器获取的,只不过获取迭代器由jvm完成,不需要我们获取迭代器而已,所以在使用增强for循环变量元素的过程中不准使用集合对象对集合的元素个数进行修改;
  • 增强for循环变量集合的元素时,不能调用迭代器的remove方法来删除元素;
  • 增强for循环一定要有遍历的目标。

四.单列集合Collection以及Collections工具类

  1.List(有序,有索引,可重复)

   List存放的对象可以按照一定的顺序排列,故查询速度快,但是在添加或者删除时,会使得后面数据的相应的移动,故而将会变得缓慢,常见的List集合有ArrayList集合等。

  2.Set(无序,无索引,不可重复)

   Set跟List集合是相反的,因而是无序,故查询较慢,相反则增删较快,常见的Set集合有HashSet集合等。

  3.Collections工具类

   Collections工具类只是在使用Collection接口时,所有的子类或者子接口都可以继承此工具类,使用里面的方法来简化实现方法的作用。

五.双列集合Map

  1.Map及其HashMap,HashTable

   Map和HashMap的用法一致,二者都是无序,不可重复的,其键(K)不能重复,值(V)可以重复,根据键得到值;HashMap是最常用的Map,根据键的HashCode值存储数据,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。因为键对象不可以重复,所以HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null,是非同步的;Hashtable与HashMap类似,是HashMap的线程安全版,它支持线程的同步,即任一时刻只有一个线程能写HashTable,从而也导致了HashTale在写入时会比较慢,它继承自Dictionary类,不同的是它不允许记录的键或者值为Null,同时效率较低。

  2.Map的两种遍历方式

   ①.keySet()

   将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key 。
取到的结果会乱序,是因为取得数据行主键的时候,使用了HashMap.keySet()方法,而这个方法返回的Set结果,里面的数据是乱序排放的。
典型用法如下:
     Map<String,String> map = new HashMap<String,String>();
  map.put("key1","value1");
  map.put("key2","value2");
  map.put("key3","value3");
  Set<String> keys = map.keySet();//先获取Map集合的所有键的Set集合,keySet()
  Iterator<String> it =keys.iterator();
   //获取迭代器
  while(it.hasNext()){
    String key = it.next();

    String value = map.get(key);

    //打印key和value值
    System.out.println(key+"="+value);
   }

  ②.entrySet()

   Set<Map.Entry<K,V>> entrySet(),返回此映射中包含的映射关系的 Set 视图。就是把(key,value)作为一个整体一对一对地存放到Set集合当中的。Map.Entry表示映射关系。entrySet():迭代后可以entry.getKey(),entry.getValue()两种方法来取key和value。返回的是Entry接口,效率较高。
典型用法如下:
       Map<String,String> map = new HashMap<String,String>();
  map.put("key1","value1");
  map.put("key2","value2");
  map.put("key3","value3");
  Set<Map.Entry<String,String>>entrys = map.entrySet();//先获取Map集合的所有键的Set集合,entrySet()
  Iterator<Map.Entry<String,String>> it =entrys.iterator();
   //获取迭代器
  while(it.hasNext()){
       Map.Entry<String,String> entry = it.next();

    String key =entry.getKey();

    String value = entry.getValue();
    System.out.println("键:"+key + ",值:" + value);
  }

基于JavaSE阶段下的集合类汇总的更多相关文章

  1. 基于JavaSE阶段的IO流详解

    1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...

  2. 基于javaWeb阶段下的Cookie和Session总结

    1. 会话技术   就是用户在使用浏览器浏览界面的时候,去访问多个页面后一次性关闭浏览器,这个过程叫会话,学习会话技术就是在客户端与服务器进行交互的时候为了能更好的保存数据.在java中会话技术只有C ...

  3. 基于javaWeb阶段下的Servlet总结

    1. Servlet概述   Servlet是用Java语言编写的服务端的程序,采用request--response模式提供Web服务,并且支持标准ServletAPI,Servlet就一个运行在w ...

  4. Django框架(十)—— 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询

    目录 多表操作:增删改,基于对象/双下划线的跨表查询.聚合查询.分组查询.F查询与Q查询 一.创建多表模型 二.一对多增删改表记录 1.一对多添加记录 2.一对多删除记录 3.一对多修改记录 三.一对 ...

  5. 基于jQuery向下弹出遮罩图片相册

    今天给大家分享一款基于jQuery向下弹出遮罩图片相册.单击相册图片时,一个遮罩层从上到下动画出现.然后弹出显示图片.这款插件适用浏览器:IE8.360.FireFox.Chrome.Safari.O ...

  6. 一款基于jquery的下拉点击改变背景图片

    今天给大家介绍一款基于jquery的下拉点击改变背景图片.单击右上角的图片,下拉显示可选择的背景图片,单击图片变为背景图.效果图下: 在线预览   源码下载 实现的代码. html代码: <a ...

  7. 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案

    基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器 ...

  8. 基于jsmpeg库下使用ffmpeg创建视频流连接websocket中继器传输视频并播放

    这个功能的基本工作是这样的: 1.使用node运行jsmpeg库下的websocket-relay.js文件,这个文件的作用是创建一个websocket视频传输中继器 2.运行ffmpeg,将输出发送 ...

  9. 【申嵌视频】基于VMWare虚拟机下安装ubuntu操作系统的详细步骤

    [申嵌视频]基于VMWare虚拟机下安装ubuntu操作系统 适合搭建mini2440, Tiny6410, smart210,Tiny4412, NanoPC-T2, NanoPC-T3, Nano ...

随机推荐

  1. Appstate的几种状态及在android 和ios触发

    AppState能告诉你当前应用是在前台还是在后台,或者处于切换应用的状态,并且能在状态变化的时候通知你. AppState 通常在处理推送通知的时候用来决定内容和对应的行为 一: App State ...

  2. 调试和开发npm模块的方式

    ln -s(软连接) 假设my-project是运行npm模块的项目,vue-router是我们需要调试的npm模块 将vue-router下载到与my-project同级目录中. git clone ...

  3. Android 7.1.1 又出幺蛾子了 —— 再谈 Android 上的 Wifi 连接

    在之前的博客文章中,我写了点在 Android 6 系统中连接到指定名称的 Wifi 的体验.然而,在 Android 7 中,有一些东西又变化了.另外就是在那篇文章中我说要提供代码,结果拖到这篇文章 ...

  4. c# 调用c++dll二次总结

    1.pinvoke结构不对称,添加语句(网上有) 2.含回调函数,成员参数的结构体必须完全,尽管自己用不到. 3.加深对c++指针的理解.一般情况下,类型加*等效于c++中的ref.但对于short* ...

  5. 软件图书,偏.net方向

    深入理解计算机系统(原书第2版) 作者:Randal E.Bryant:1981年在麻省理工学院获计算机科学博士学位,现任美国卡内基·梅隆大学计算机学院院长 内容: 深入浅出地介绍了处理器.编译器.操 ...

  6. DB2 V9 默认帐户信息和服务启动信息

    1 dasusr1 DB2 管理服务器用户是管理DAS(Database Adminitrator Service).要完全适用db2 cc 必须启动DAS.DB2 管理服务器(DAS)响应来自 DB ...

  7. EasyUI使用DataGrid向服务器传参

    由于DataGrid自带有Post方式,使用Url可以向指定的地址Post数据,所以从这方面来看和Jquery的Ajax非常像(我想应该就是使用的Ajax,不过没有深入研究过Easyui的源代码).但 ...

  8. Javascript中判断变量是数组还是对象(array还是object)

    怎样判断一个JavaScript变量是array还是obiect? 答案: 1.如果你只是用typeof来检查该变量,不论是array还是object,都将返回‘objec'. 此问题的一个可行的答案 ...

  9. JSON字符串转换成对象时候 需要有默认构造器 因为这是通过反射创建的 反射是先通过默认构造器创建对象的

    JSON字符串转换成对象时候 需要有默认构造器 因为这是通过反射创建的 反射是先通过默认构造器创建对象的

  10. DjangoORM字段参数介绍

    参数介绍: 字段的参数:     null:             ->db是否可以为空     default:          ->默认值     primary_key:     ...