开篇引言

本篇文章我将要详细的介绍一下什么是容器?以及什么是1136?来系统全面的了解容器,以及容器的应用,下面就进入我们的容器之旅吧!

1.什么是容器?

用来存储和组织其他对象的对象。我们也可以这样来理解,容器其实类似于我们生活中的菜篮子、桶等装东西的器皿,我们可以把各种蔬菜装在菜篮子里面,同时也可以把油啊、水啊、或者是一些其他的东西装在桶里面,而这些菜啊或者是水也抽象起来也就是一些对象,而容器则把这些对象组织了起来!懂得了容器到底是干什么的,下面我们来详细的了解一下容器。在JAVA中封装了很多的容器的API,提供了一些类的实例,帮助存放一些程序的对象。 这些类的对象知识总结起来也就是1136,下面我们来详细的介绍一下什么是1136?

2.什么是1136?

  1. 1--一个类
  2. 1--一个图
  3. 3--三个知识点
  4. 6--六个接口

下面来介绍一下整个容器知识的1136框架

3.1136整体框架


下面我们就看看每个部分的详细介绍

1.一个类

Collections 类

此类完全由在 collection 上进行操作或返回 collection的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新collection,以及少数其他内容。也就是说这个类是collect接口的根基类

如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都会抛出NullPointerException。

1、个图

图中明确的指出了每个接口之间的关系,以及所能完成的工作,具体的每个接口的介绍请参考六个接口中的详细介绍 。此处我们需要准确的记住这些图之间的关系,然后在进一步向下了解

3个知识点


1、for循环加强

       对于此处内容学习要求:懂得意思即可,也就是说当某个地方出来的时候你知道这是用的for循环加强即可。下面我们来看个具体的例子,说一下什么是for循环加强,在JAVA 中,JDK1.5以后都是支持for循环加强用法的。举个简单的例子,加入我要打印一个数组中的每个元素。
通常我们是这样写的:

  1. int [] arr={1,2,3,4,5};
  2. for (int i = 0;i<arr.length;i++)
  3. {
  4. System.out.println(i);
  5. }

用了for循环加强的写法:

  1. int [] arr ={1,2,3,4,5};
  2. for (int i:arr)
  3. {
  4. System.out.println(i);
  5. }

两种虽然写法不同,但是在运行出来的结果下是相同的,这也就是for循环加强。

2、泛型

   首先我们先来了解一下什么是泛型 ? 

  1. 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。

下面看个简单的例子

  例如map类允许添加任意一个类的对象,那么当我们添加了一个对象后,当然返回的也要是这个对象,例如此处添加了一个string,返回的也要是string。但   Map.get()被定义为返回 Object,所以必须将 Map.get()的结果强制类型转换为期望的类型(这里是string),例如下面的代码:

  1. Map m = new HashMap();
  2.  
  3. m.put("key","name");
  4.  
  5. String s =(String) m.get("key");

要让程序通过编译,必须将 get() 的结果强制类型转换为 String,并且希望结果真的是一个 String。但是有可能某人已经在该映射中保存了不是 String 的东西,这样的话,上面的代码将会抛出 ClassCastException。那么理想情况下, m是一个 Map,它将 String键映射到 String值。这样就不会出错了,这就是泛型所做的工作。

泛型的编写模式:

在我们查看JDK 的时候应该常常会看到这样的写法

  1. public interface Collection<E>

其实这就是泛型,在两个尖括号内,我们就可以定义你想要实现的类型

例如List<String> c = new ArrayList<String>();

这样写好后,当我们在添加元素等操作时,它也是string类型,而不用我们强制将Object类型转换为我们需要的类型了 如下代码所示:

  1. List<String> c = new ArrayList<String>();
  2. c.add("aaa");
  3. c.add("bbb");
  4. c.add("ccc");
  5. for(int i=0; i<c.size(); i++) {
  6. String s = c.get(i);
  7. System.out.println(s);
  8. }

上述代码中也体现除了泛型的一些好处: 消除强制类型转换这是 泛型的一个好处,同时消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。但也并不是用泛型了就否好,所以也需要适当的使用

3、打包解包(Auto-boxing/unboxing)

  这也是在JDK1.5 之后所具有的功能 下面我们来看个简单的例子,通过对比来学习这个打包 解包的好处

自动打包 自动将基础类型转换成为类

自动解包 自动将类转换为基础类型

  1. import java.util.*;
  2. public class TestMap {
  3. public static void main(String args[]) {
  4. Map m1 = new HashMap();
  5. //m1.put("one",new Integer(1));
  6. m1.put("one", 1);
  7. if(m1.containsKey("two")) {
  8. //int i = ((Integer)m1.get("two")).intValue();
  9. int i = (Integer)m1.get("two");
  10. System.out.println(i);
  11. }
  12. }
  13. }

上述代码中用双斜线注释的部分也就是没有自打包解包时的写法, 通过对比它下面对应的语句,大家应该能看出来有什么好处的吧。有了自打包  解包,我们就不必在new一个对象了,而是在JAVA 内部已经自动的给你编译了。这样带来的好处也就可想而知了。

6个接口

 
下面我们就来介绍一下每个接口

comparable  接口

该接口下只有一个方法 
compareTo(Object o) 比较此对象与指定对象的顺序。 同时此处的Object 就可以用泛型  
该方法的用法其实在我们平时写代码的程序中也比较常见,例如假如我们要排序一些数字啊,或者是字符串啊,就是通过这个接口中的方法来判断的。

collection 接口 list 接口 和Set  接口

 通过上述的图我们可以很明显的看出来这三个接口之间的关系   
list 中添加的元素有顺序,可重复
set中添加的元素无顺序不可重复  

下面看一段代码来简单的理解一下 :
  1. public static void main(String args[]) {
  2. Set s = new HashSet();
  3. s.add("hello");
  4. s.add("java");
  5. s.add("hello");
  6. System.out.print(s);
  7. }

由于set 不允许重复添加 ,所以输出的结果为hello java 

而在list 中的添加方法则是可以实现的

list和set 接口中所包含的方法 我们可以通过查询API文档来了解,在学习JAVA 的过程中查询API文档也是必不可少的一部分 

而对于collection接口,具体的实现方法也是需要查找API 文档,在此需要强调的一点就是equals 方法
当我们要重写equals 方法的时候,同时一定要重写他 的Hashcode方法  也就是说相等的对象要有相等的hashcode   就像字典里面每个字的索引都对应了唯一的解释一样

Map  接口

map接口用来存储成对的key 和value  而且 value值不能重复 
也就是一个索引 一个内容
下面的小例子也是结合了泛型 字打包和解包后的map接口的调用实例 
  1. import java.util.*;
  2. public class TestMap2 {
  3. public static void main(String args[]) {
  4. Map<String, Integer> m1 = new HashMap<String , Integer>();
  5. m1.put("one", 1);
  6. m1.put("two", 2);
  7. m1.put("three", 3);
  8.  
  9. System.out.println(m1.size());
  10. System.out.println(m1.containsKey("one"));
  11.  
  12. if(m1.containsKey("two")) {
  13. //int i = ((Integer)m1.get("two")).intValue();
  14. int i = m1.get("two");
  15. System.out.println(i);
  16. }
  17.  
  18. }
  19. }

到此关于容器的1136 也就介绍完毕了,对于我们初学者,一些接口中的方法肯定是不熟悉的,那么也就需要我们多查API文档,用着次数多了,也就了解了。以上的内容也是我在学习容器的过程中,所总结的一些内容。
   其实在面向对象的学习中,我们知道了什么是容器,以及一些基本的类,接口,等余下的任务也就是去熟练的过程,类中的方法很多,所以熟悉的使用这些方法后,也就能将容器的理解和应用运用的自如了。
   到此J2SE 容器之旅告一段落,希望能给您带来帮助
   关于J2SE 的其他知识总结日后会一一奉上 。欢迎您访问我的博客

[置顶] 【J2SE 】1136 容器之旅的更多相关文章

  1. [置顶] 自己写代码生成器之生成Dal层代码(获取数据库所有表名称)

    自己写代码生成器之生成Dal层代码(获取数据库所有表名称) --得到数据库birthday所有表名称 select name from sysobjects where [type]='U' --se ...

  2. Java容器之旅:容器基础知识总结

    下图展示了Java容器类库的完备图,包括抽象类和遗留构件(不包括Queue的实现). 常用的容器用黑色粗线框表示,点线框表示接口,虚线框表示抽象类,实线框表示类,空心箭头表示实现关系.Produce表 ...

  3. 在UWP中页面滑动导航栏置顶

    最近在研究掌上英雄联盟,主要是用来给自己看新闻,顺便copy个界面改一下段位装装逼,可是在我copy的时候发现这个东西 当你滑动到一定距离的时候导航栏会置顶不动,这个特性在微博和淘宝都有,我看了@ms ...

  4. WinFrom窗体始终置顶

    调用WindowsAPI使窗体始终保持置顶效果,不被其他窗体遮盖: [DllImport("user32.dll", CharSet = CharSet.Auto)] privat ...

  5. winform窗体置顶

    winform窗体置顶 金刚 winform 置顶 今天做了一个winform小工具.需要设置置顶功能. 网上找了下,发现百度真的很垃圾... 还是必应靠谱些. 找到一个可以链接. https://s ...

  6. 自定义置顶TOP按钮

    简述一下,分为三个步骤: 1. 添加Html代码 2. 调整Css样式 3. 添加Jquery代码 具体代码如下: <style type="text/css"> #G ...

  7. ahk之路:利用ahk在window7下实现窗口置顶

    操作系统:win7 64位 ahk版本:autohotkey_L1.1.24.03 今天安装了AutoHotkey_1.1.24.03.SciTE.PuloversMacroCreator,重新开始我 ...

  8. Qt中让Qwidget置顶的方法

    一般来是说窗体置顶和取消只要        setWindowFlags(Qt::WindowStaysOnTopHint);        setWindowFlags(Qt::Widget); 要 ...

  9. js之滚动置顶效果

    0.js获取高度 ? 1 2 3 4 5 6 document.all   // 只有ie认识   document.body.clientHeight              // 文档的高,屏幕 ...

随机推荐

  1. 使用泛型对java数组扩容

    编写一个通用方法,其功能是将数组扩展到10%+10个元素(转载请注明出处) package cn.reflection; import java.lang.reflect.Array; public ...

  2. [C#参考]UI和线程(一)

    Windows是一个多任务的系统,如果你使用的是windows 2000及其以上版本,你可以通过任务管理器查看当前系统运行的程序和进程. 什么是进程呢?当一个程序开始运行时,它就是一个进程,进程所指包 ...

  3. ECSHOP 开发总结

    今天算是仔细学习ecshop 的第一天,实话说,如果不是任务紧,肯定不用这个东西.2013年之后都不再维护了.使用起来万一出什么BUG 就不好了.而且不是纯粹的MVC ,看代码也是怪怪的呢.但是都已经 ...

  4. angular checkbox required

    Here is the fiddle http://jsfiddle.net/lumixraku/xgLz7d4j/2/ html <body ng-app="app"> ...

  5. SQL 时间戳

    一直对时间戳这个概念比较模糊,相信有很多朋友也都会误认为:时间戳是一个时间字段,每次增加数据时,填入当前的时间值.其实这误导了很多朋友. 1.基本概念 时间戳:数据库中自动生成的唯一二进制数字,与时间 ...

  6. liunx使用技巧

    1.挂载与卸载U盘 新建一个目录:mkdir /mnt/usb; Fdisk –l |less  查看添加之后的设备名,设备文件系统格式 加载U盘设备: mount –t vfat /mnt/usb ...

  7. xmemcached的time out

    最近维护线上发现不停有java.util.concurrent.TimeoutException: Timed out(200) waiting for operation的问题,排查程序.配置文件的 ...

  8. Html 小插件2

    调用google的JS翻译插件实现页面自动翻译功能 网址http://translate.google.com/translate_tools 设置自己需要的配置生成如下代码放到自己站的页面头部 代码 ...

  9. HDFS 2中Namenode启动时WebUI的变化

      在HDFS1中NameNode启动顺序是这样的: 1. 读取Fsimage文件 2. 读取edit logs文件,逐行执行里面的操作 3. 写checkpoint,生成新的Fsimage(老的Fs ...

  10. c#观察者模式学习笔记(1)

    c#中的观察者是一种逻辑上很重要的角色,在服务端,观察者是服务端的通讯员,它将事件与业务紧密的结合,彼此又能按照逻辑进行分离. 实现方法为: (1)声明事件的委托原型,作为事件订阅的回调. (2)使用 ...