J2SE 容器
知识点:Collection接口、Iterator接口、增强的for循环、Set接口、List接口和Comparable接口、Collection类、Map接口、自动打包/解包、泛型
容器:API文档位于 java.util 包内
容器有这几种:数组、Set、Lish、Map
1、Collection 接口
- 定义了一组存取对象的方法,存储方式有Set 和 List
- Set 中的数据对象没有顺序且不可重复
- List 中的对象有顺序且可以重复
- Map 接口:定义了存储“键(key)--- 值(value)”映射对的方法


- Collection 接口所定义的方法:

- 容器类对象在调用remove、contains等方法时,需要比较两个对象是否equals,这会涉及到对象类型的equals方法和hashCode方法;
- 对于自定义的类型,需要重写equals和hashCode方法,以实现自定义的对象相等规则
- 当对象用在Map接口里头作为键(key)使用的时候,会使用hashCode方法(hashCode特别适合用作索引)
- 重写equals方法,必须重写hashCode方法
- 两个对象如果互相的equals,则他们两个必须具备相同的hashCode
//remove某个对象的时候,会从容器中挨个将对象取出来与这个对象作比较,如果有对象和这个对象equals,则remove成功
import java.util.*; public class BasicContainer{
public static void main(String args[]){
Collection c = new HashSet(); //用哈希表实现的容器c(父类引用指向子类对象) c.add("hello");
c.remove("hello");//remove成功 //Integer也重写了equals方法,所以只要值一样,这两个对象就就equals
c.add(new Integer());
c.remove(new Integer());//remove成功 c.add(new Name("f1","l1"));
Syetem.out.println(c.remove(new Name("f1","l1")));//返回“false”
//这两个Name对象并不equals,这个Name对象并没有重写equals的情况下,他们两个equals只有一个条件:指向同一对象 System.out.println(c);//
}
} class Name{
private String firstName,lastName;
public Name(String firstName,String lastName){
this.firstName = firstName;
this.lastName = lastName;
} //重写Name对象的equals和hashCode方法如下:
public boolean equals(Object obj){
if (obj instanceof Name){ //如果obj是一个Name对象
Name name = (Name) obj; //将obj强制转换成一个Name对象
return (firstName.equals(name.firstName)) && (lastName.equals(name.lastName));//只有传进来的firstname和lastname都相等时才返回true
}
return super.equals(obj);//如果obj不是一个Name对象,交给父类处理,Name的父类为object。object的equals方法:比较当前对象和传进来的对象是不是同一对象
}
public int hashCode(){
return firstName.hashCode();
}
}
2、Iterator接口
- 所有实现了Collection接口的容器类都有一个iterator方法,用以返回一个实现了Iterator接口的对象
- Iterator对象成为迭代器,用以方便的实现对容器内元素的遍历操作
- Iterator接口就是一个统一用来遍历Collection元素的方法(无论对象是装在数组、链表、哈希表里,但是对于Iterator来说,都是一样的。Iterator就像一个游标,指在第一个元素的左边)




3、Set接口
Set接口是Collection的子接口,实现Set接口的容器类中的元素是没有顺序且不可以重复的,
Set类容器有HashSet和TreeSet

4、List 接口
5、Map 接口
实现Map接口的类用来存储 “ 键---值 ” 对
Map接口的实现类有HashMap 和 TreeMap等
Map类中存储的键---值对通过键来标识,所以键值不能重复(互相不能equals,HashCode不能重复)

5、 Comparable接口
6、泛型
在定义集合的时候,同时定义集合中对象的类型
练习:
import.java.util.*;
public class TestArgsWords{
public static void main(args[]){
Map m = new HashMap();
for(int i = 0;i < args.length();i++){ //args是一个数组,循环args
//m.get(args[i]) 以args[i]为key的那个value,如果没有则返回null
int number = (Integer) m.get(args[i]) == null ? 0 : (Integer) a.get(args[i]);//判断是否为空,如果为null就等于0,如果不为空就等于他本身
m.put(args[i],number==0 ? 1 : number + 1);//如果number为0(即m.get(args[i]) == null),则number=0;如果number为1,则为number加1
}
System.out.println(m.size());
Syetem.out.println(m);
}
}
//泛型:(不需要强制转换)
import.java.util.*;
public class TestArgsWords{
public static void main(args[]){
Map<String,Integer> m = new HashMap<String,Integer();
for(int i = 0;i < args.length();i++){ //args是一个数组,循环args
//m.get(args[i]) 以args[i]为key的那个value,如果没有则返回null
int number = m.get(args[i]) == null ? 0 : a.get(args[i]);//判断是否为空,如果为null就等于0,如果不为空就等于他本身
m.put(args[i],number==0 ? 1 : number + 1);//如果number为0(即m.get(args[i]) == null),则number=0;如果number为1,则为number加1
}
System.out.println(m.size());
Syetem.out.println(m);
}
}

J2SE 容器的更多相关文章
- [置顶] 【J2SE 】1136 容器之旅
开篇引言 本篇文章我将要详细的介绍一下什么是容器?以及什么是1136?来系统全面的了解容器,以及容器的应用,下面就进入我们的容器之旅吧! 1.什么是容器? 用来存储和组织其他对象的对象.我们也可以这样 ...
- Java面试汇总
转自:http://zy19982004.iteye.com/blog/1846537#comments 一.All 最近找工作,遇到的笔试面试题,归纳如下,供大家参考. 二.J2SE 容器 Hash ...
- J2SE总结(一)-------容器
最近大家都在讨论容器以及如何在项目中去实际的应用它,由于之前对容器没有什么概念,所以把J2SE里面讲的容器的一些基础知识看了一下,总结一下最基本的东西. 围绕整章最核心的就属下面这张图了吧. 一.概念 ...
- Java2_J2EE、J2SE和J2ME的区别
解析J2EE.J2SE.J2ME.JDK的区别 本文向大家简单介绍一下JDK.J2EE.J2SE.J2ME概念及区别,J2EE,J2SE,J2ME是java针对不同的的使用来提供不同的服务 ...
- Eclipse管理Java工程(j2se/j2ee/maven)
Eclipse管理J2SE/J2EE(Maven)项目 eclipse是一个集成开发工具,有编译,运行,打包部署等功能.eclipse可以新建多种项目,不同的项目有不同的IDE层次结构,方便用户管理资 ...
- J2SE J2EE J2ME的区别
J2SE J2EE J2ME的区别 J2SE J2EE J2ME的区别多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不 ...
- JDK 高性能编程之容器
高性能编程在对不同场景下对于容器的选择有着非常苛刻的条件,这里记录下前人总结的经验,并对源码进行调试 JDK高性能编程之容器 读书笔记内容部分来源书籍深入理解JVM.互联网等 先放一个类图util,点 ...
- jdk,j2ee,j2se,j2me的概念区别
jdk,j2ee,j2se,j2me的概念区别1.JDK是Java development toolkit,相当于是Java的库函数,是编译,运行java程序的工具包.J2EE是Java 2 ente ...
- j2se总结
j2se总结 经过一周多的时间完成了j2se基础的学习,个人感觉最大的收获不是对j2se的语法了解了多少,而是对面向对象的认识再一次加深了.面向对象,让类和对象成为一切. 下边是对j2se的一部分的总 ...
随机推荐
- 以py脚本形式ORM操作 及 django终端打印sql语句的设置
1. 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_loggers': False ...
- 如何计算假设检验的功效(power)和效应量(effect size)?
做完一个假设检验之后,如果结果具有统计显著性,那么还需要继续计算其效应量,如果结果不具有统计显著性,并且还需要继续进行决策的话,那么需要计算功效. 功效(power):正确拒绝原假设的概率,记作1-β ...
- BootStrap Table 合并单元格
为了更直观展示表格的一大堆乱七八糟的数据,合并单元格就派上用场: 效果: 贴上JSON数据(后台查询数据一定要对合并字段排序): [ { "city": "广州市&quo ...
- android studio 配置相关问题
1:Unknown AVD name, use -list-avds to see valid list. 下午1:26 Emulator: emulator: ERROR: Unknown A ...
- Mysql之配置双主热备+keeepalived.md
准备 1 1. 双主 master1 192.168.199.49 2 master2 192.168.199.50 3 VIP 192.168.199.52 //虚拟IP 4 2.环境 master ...
- Spring Security教程(三)
在上一篇博客中讲解了用Spring Security自带的默认数据库存储用户和权限的数据,但是Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也不一定能满足项 ...
- 【技术博客】Postman接口测试教程 - 环境、附加验证、文件上传测试
Postman接口测试教程 - 环境.附加验证.文件上传测试 v1.0 作者:ZBW 前言 继利用Postman和Jmeter进行接口性能测试之后,我们发现Postman作为一款入门容易的工具,其内置 ...
- QuantLib 金融计算——收益率曲线之构建曲线(4)
[TOC] 如果未做特别说明,文中的程序都是 C++11 代码. QuantLib 金融计算--收益率曲线之构建曲线(4) 本文代码对应的 QuantLib 版本是 1.15.相关源代码可以在 Qua ...
- PHP生成正则表达式的类
正则表达式,写起来还是比较费劲的,于是封装个类,初稿,抛砖引玉. 关于正则,建议参考 https://github.com/CyC2018/CS-Notes/blob/master/notes/%E6 ...
- 科大讯飞语音芯片xfs5152CE,分享遇到的一些坑
首先 芯片手册的I2C地址是写地址,是8位的,真正的地址是7位地址,应该是0x40,最低位是读写位,读置1,为0x81,写置0,为0x80. 如果是模拟I2C倒无所谓,最坑的是我用的是寄存器,所以必须 ...