[置顶] 【J2SE 】1136 容器之旅
开篇引言
本篇文章我将要详细的介绍一下什么是容器?以及什么是1136?来系统全面的了解容器,以及容器的应用,下面就进入我们的容器之旅吧!
1.什么是容器?
用来存储和组织其他对象的对象。我们也可以这样来理解,容器其实类似于我们生活中的菜篮子、桶等装东西的器皿,我们可以把各种蔬菜装在菜篮子里面,同时也可以把油啊、水啊、或者是一些其他的东西装在桶里面,而这些菜啊或者是水也抽象起来也就是一些对象,而容器则把这些对象组织了起来!懂得了容器到底是干什么的,下面我们来详细的了解一下容器。在JAVA中封装了很多的容器的API,提供了一些类的实例,帮助存放一些程序的对象。 这些类的对象知识总结起来也就是1136,下面我们来详细的介绍一下什么是1136?
2.什么是1136?
- 1--一个类
- 1--一个图
- 3--三个知识点
- 6--六个接口
下面来介绍一下整个容器知识的1136框架
3.1136整体框架
下面我们就看看每个部分的详细介绍
1.一个类
Collections 类
此类完全由在 collection 上进行操作或返回 collection的静态方法组成。它包含在 collection 上操作的多态算法,即“包装器”,包装器返回由指定 collection 支持的新collection,以及少数其他内容。也就是说这个类是collect接口的根基类
如果为此类的方法所提供的 collection 或类对象为 null,则这些方法都会抛出NullPointerException。
1、个图
图中明确的指出了每个接口之间的关系,以及所能完成的工作,具体的每个接口的介绍请参考六个接口中的详细介绍 。此处我们需要准确的记住这些图之间的关系,然后在进一步向下了解
3个知识点
1、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 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)
自动打包 自动将基础类型转换成为类
自动解包 自动将类转换为基础类型
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 接口
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
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);
} }
}
[置顶] 【J2SE 】1136 容器之旅的更多相关文章
- [置顶] 自己写代码生成器之生成Dal层代码(获取数据库所有表名称)
自己写代码生成器之生成Dal层代码(获取数据库所有表名称) --得到数据库birthday所有表名称 select name from sysobjects where [type]='U' --se ...
- Java容器之旅:容器基础知识总结
下图展示了Java容器类库的完备图,包括抽象类和遗留构件(不包括Queue的实现). 常用的容器用黑色粗线框表示,点线框表示接口,虚线框表示抽象类,实线框表示类,空心箭头表示实现关系.Produce表 ...
- 在UWP中页面滑动导航栏置顶
最近在研究掌上英雄联盟,主要是用来给自己看新闻,顺便copy个界面改一下段位装装逼,可是在我copy的时候发现这个东西 当你滑动到一定距离的时候导航栏会置顶不动,这个特性在微博和淘宝都有,我看了@ms ...
- WinFrom窗体始终置顶
调用WindowsAPI使窗体始终保持置顶效果,不被其他窗体遮盖: [DllImport("user32.dll", CharSet = CharSet.Auto)] privat ...
- winform窗体置顶
winform窗体置顶 金刚 winform 置顶 今天做了一个winform小工具.需要设置置顶功能. 网上找了下,发现百度真的很垃圾... 还是必应靠谱些. 找到一个可以链接. https://s ...
- 自定义置顶TOP按钮
简述一下,分为三个步骤: 1. 添加Html代码 2. 调整Css样式 3. 添加Jquery代码 具体代码如下: <style type="text/css"> #G ...
- ahk之路:利用ahk在window7下实现窗口置顶
操作系统:win7 64位 ahk版本:autohotkey_L1.1.24.03 今天安装了AutoHotkey_1.1.24.03.SciTE.PuloversMacroCreator,重新开始我 ...
- Qt中让Qwidget置顶的方法
一般来是说窗体置顶和取消只要 setWindowFlags(Qt::WindowStaysOnTopHint); setWindowFlags(Qt::Widget); 要 ...
- js之滚动置顶效果
0.js获取高度 ? 1 2 3 4 5 6 document.all // 只有ie认识 document.body.clientHeight // 文档的高,屏幕 ...
随机推荐
- IOS8 设置TableView Separatorinset 分割线从边框顶端开始
IOS8 设置TableView Separatorinset 分割线从边框顶端开始 在ios8上 [TableViewsetSeparatorInset:UIEdgeInsetsMake(0,0 ...
- 今年暑假不AC1
Description "今年暑假不AC?" "是的." "那你干什么呢?" "看世界杯呀,笨蛋!" " ...
- Hive常用操作之数据导入导出
一.Hive数据导入导出 1.hive数据导出 很多时候,我们在hive中执行select语句,希望将最终的结果保存到本地文件或者保存到hdfs系统中或者保存到一个新的表中,hive提供了方便的关键词 ...
- apktool 反翻译错误
-出现 UndefinedResObject Exception : 这是因为被反编译的apk中有当前的framework不支持的属性:解决方式如下: 1.删除C:\Users\Administrat ...
- codinglife主题小修改和有意思的博客挂件
这个主题很漂亮,不过为了迎合自己的喜好ヽ(•̀ω•́ )ゝ,修改了字号.阴影之类的小细节.同时下面还有我博客里面的两个有意思的小挂件,请向右边看(๑و•̀ω•́)و 1.主题修改:复制下面的css代码 ...
- eclipse run on server 浏览器启动设置
- jQuery数据缓存data(name, value)详解及实现
一. jQuery数据缓存的作用 jQuery数据缓存的作用在中文API中是这样描述的:“用于在一个元素上存取数据而避免了循环引用的风险”.如何理解这句话呢,看看我下面的举例,不知道合不合适,如果你有 ...
- 0617 python 基础04
控制流--for 循环 >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 换行输出 >>> for i in range(1 ...
- 记录.net 中的常见术语
--Entity Framework和NHibernate --EF和NH都是一种ORM技术.就是对象关系模型映射. --NHibernate和Entity Framework 4.0优劣势争论 -- ...
- python进阶3--文件系统
文件系统 python的标准库中包括大量工具,可以处理文件系统中的文件,构造和解析文件名,也可以检查文件内容. pyhton表文件名表示为简单的字符串,另外还提供了一些工具,用来由os.path中平台 ...