开篇引言

本篇文章我将要详细的介绍一下什么是容器?以及什么是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循环加强用法的。举个简单的例子,加入我要打印一个数组中的每个元素。
通常我们是这样写的:

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

用了for循环加强的写法:

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

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

2、泛型

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

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

下面看个简单的例子

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

Map m = new HashMap();

m.put("key","name");

String s =(String) m.get("key");

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

泛型的编写模式:

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

    public interface Collection<E>

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

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

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

	List<String> c = new ArrayList<String>();
c.add("aaa");
c.add("bbb");
c.add("ccc");
for(int i=0; i<c.size(); i++) {
String s = c.get(i);
System.out.println(s);
}

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

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

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

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

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

import java.util.*;
public class TestMap {
public static void main(String args[]) {
Map m1 = new HashMap();
//m1.put("one",new Integer(1));
m1.put("one", 1);
if(m1.containsKey("two")) {
//int i = ((Integer)m1.get("two")).intValue();
int i = (Integer)m1.get("two");
System.out.println(i);
}
}
}

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

6个接口

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

comparable  接口

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

collection 接口 list 接口 和Set  接口

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

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

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

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

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

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

Map  接口

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

到此关于容器的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. C#根据文件流判断文件类型

    判断文件真实的类型,不是通过扩展名来判断: /// <summary> /// 判断文件格式 /// http://www.cnblogs.com/babycool /// </su ...

  2. spring schema自定义

    今天看了一下分布式服务框架的那本书,于是里面提到了spring schema的自定义,于是去简单的了解了一下 参考资源:spring schema扩展: http://www.yihaomen.com ...

  3. 线性插值(linear interpolation)

    线性插值通常用于:使用离散的样本来重建连续的信号.在计算机图形学中,这些样本可能是纹理.动画关键帧等. template <class T> T Lerp(T& a, T& ...

  4. C++函数传值调用

    C++的函数的参数调用是传值方式. 想要改变传值调用,有引用和指针两种方式.其中,引用的实现机理也是通过一个指针,但是具体和指针传值的方式又不一样.具体见:C++中的指针与引用 对于指针传值,其实实际 ...

  5. BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )

    dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...

  6. Java 动态代理(转)

    一.代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后 处理消息等.代理类与委托类之间通常会存在 ...

  7. MarkDown使用 (三)表格

    MarkDown表格的用法 MarkDown表格的用法 例如: $$ \begin{array}{c|lcr} n & \text{Left} & \text{Center} & ...

  8. 替换bmp图片中的颜色 good

    工作中,经常需要将bmp图片中的某个颜色修改为另外一种颜色.比如:将图片中的所有白色均修改成灰色. 平时都是拿画图板中的油漆桶工具一点一点的刷,费时又费力.(这么干好几年了 :( ) 今天抽空编了一个 ...

  9. PL/SQL 基础编程

    PL/Sql 编程 PL/Sql结构 [declare] --声明变量 begin --执行部分 [exception] ---异常处理部分 end PL/Sql  基本数据类型 数值类型 1. nu ...

  10. VS2015自定义注释内容

    一直想自动添加一些注释信息,找了好多种方式:各种插件什么的,最后偶然发现可以修改vs的模板可以做到,下面介绍如何改 首先找到vs的安装目录,如下是我的安装目录: D:\Program Files\VS ...