Java 高级应用编程 第二章 集合
一、Java 中的集合类
1、集合概述
Java中集合类是用来存放对象的
集合相当于一个容器,里面包容着一组对象 —— 容器类
其中的每个对象作为集合的一个元素出现
Java API提供的集合类位于java.util包内
2、Java 中数组与集合的比较
数组也是容器,它是定长的,访问较快,但是数组不会自动扩充
数组可以包含基本数据类型或引用类型的对象,而集合中只能包含引用类型的对象
3、Java 中集合框架层次结构

二、Colleciton 接口
1、一组称为元素的对象
2、一个Collection中可以放不同类型的数据
3、是Set接口和List接口的父类
4、是否有特定的顺序以及是否允许重复,取决于它的实现
5、Set - 无序的集合;不允许重复 HashSet
6、List - 有序的集合;允许重复
ArrayList、
LinkedList
1、Collection 接口


2、Set 接口
(1)Collection的子接口
(2)用来包含一组 无序无重复 的对象
无序 — 是指元素存入顺序和集合内存储的顺序不同
无重复 — 两个对象e1和e2,如果e1.equals(e2)返回true,则认为e1和e2重复
3、Set 接口的实现类
HashSet — HashSet的特性在于其内部对象的散列存取,即采用哈希技术
TreeSet — TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的
4、List 接口
Collection的子接口
用来包含一组 有序有重复 的对象
List中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素
List有两种主要的集合实现类:
ArrayList
LinkedList

5、List 接口的实现类
1、ArrayList是线性顺序存储的,是一种线性表
1、它的特性和数组很接近,数组大小是不变的,而ArrayList的大小是可以动态改变的
3、是数据结构中链表的java实现
4、相对于List来说,LinkedList最主要的功能方面的增强是可以在
List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现。所以它可以非常方便的实现我们数据结构中的常见的
Stack(栈)、queue(队列)等

5、ArrayList 与 LinkedList的比较
存储结构
ArrayList是线性顺序存储
LinkedList对象间彼此串连起来的一个链表
操作性能
ArrayList适合随机查询的场合
LinkedList元素的插入和删除操作性高
从功能上,LinkedList要多一些
6、Iterator 接口
1、Iterator对象称作迭代器,用来方便的实现对容器内的元素进行遍历操作
2、所有实现了Collection接口的集合类都有一个iterator( )方法,返回一个实现了Iterator接口的对象
3、Iterator对象实现了统一的一个用来遍历Collection中对象的方法
4、Iterator是为遍历而设计,能够从集合中取出元素和删除元素,但是没有添加元素的
功能
5、Iterator的功能上比较简单,使用中,只能单向移动
6、 Iterator 接口

三、Collections 类
Collections类是类似于Arrays类的公用工具类 ,它提供了一些static方法供集合类使用或操作集合类 。
Collections 类中的方法


四、Map 接口
Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象
Map是不同于Collection的另外一种集合接口
Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的
Map接口有两个实现:
HashMap — key/value对是按照Hash算法存储的
TreeMap — key/value对是排序(按key排序)存储的
1、Map 接口


2、Map 接口的实现类
基于哈希表的 Map 接口的实现
HashMap的构造方法
HashMap 变量名 = new HashMap() ;
HashMap 变量名 = new HashMap(int capacity) ;
HashMap 变量名 = new HashMap(int capacity,float lodeFactor) ;
HashMap 变量名 = new HashMap(Map m) ;
3、HashMap 与 TreeMap 的比较
Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
五、集合类的选择
使用集合类时常见的异常


六、泛型的使用
1、集合在使用上的问题
集合中的add( )方法接受的是一个Object对象的参数 ,在获取集合中的对象时,必须进行造型(强制类型转换)操作。
造型操作可能出现问题,一般在程序运行时才能发生,发现问题比较困难。
2、集合中泛型的使用
在对象放入集合前,为其作个限制
在获取集合中的对象时,不用进行造型的操作
当有不同类型的对象添加到集合中的时候,编译时就能检查出错误
泛型经常被称为参数化类型,它能够像方法一样接受不同类型的参数。
定义方式
ArrayList<E> 变量名 ;
E是变量类型
ArrayList<String> arr;
arr = new ArrayList<String>();
HashMap<Integer,String> hm = new HashMap<Integer,String>();
Java 高级应用编程 第二章 集合的更多相关文章
- Professional.WebGL.Programming-Chapter 2(高级WebGL编程——第二章)
(目前发现一些文章被盗用的情况,我们将在每篇文章前面添加原文地址,本文源地址:http://www.cnblogs.com/idealer3d/p/3508251.html) 这一章主要通过创建一个三 ...
- Java 高级应用编程 第一章 工具类
一.Java API Java API简介 1.API (Application Programming Interface) 应用程序接口 2.Java中的API,就是JDK提供的各种功能的Java ...
- 《JavaScript高级程序设计》——第二章在HTML使用JavaScript
这章讲的是JavaScript在HTML中的使用,也就是<script>元素的属性.书中详细讲了async.defer.src和type四个<script>的属性. 下面是对第 ...
- java面向对象编程——第二章 java基础语法
第二章 java基础语法 1. java关键字 abstract boolean break byte case catch char class const continue default do ...
- [转]Windows Shell 编程 第二章 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987893】
第二章Shell的结构 “Shell 编程”的大伞之下有大量的API函数和COM接口.这个种类繁多的‘命令’集允许你用不同的方法对Windows Shell进行编程.函数和接口并不是两种提供相同功能 ...
- 使用MYSQL数据库实现编程----第二章第三章课堂知识小总结
第二章1:创建数据库create database myschool 2.数据类型 1.整型 int 2.小数 double 精确度要求高的 ----Decimal(18,4) 2222222 ...
- 《深入理解Java虚拟机》笔记--第二章、Java内存区域与内存溢出异常
Java程序员把内存的控制权交给了Java虚拟机.在Java虚拟机内存管理机制的帮助下,程序员不再需要为每一个new操作写对应的delete/free代码,而且不容易出现内存泄露和溢出. 虚拟机在执行 ...
- Java面向对象编程 第二章 第一个Java应用
2.1创建Java源文件 Java应用由一个或多个扩展名为".java"的文件构成,这些文件被称为Java源文件,从编译的角度,则被称为编译单元. 本章包含两个Java源文件:Do ...
- JAVA / MySql 编程——第二章 初始MySQL
1. MySQL: ● MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL最流行的关系型数据库管理系统, ...
随机推荐
- Yii2用Gii自动生成Module+Model+CRUD
1. 开启gii模块 common/config/main-local.php加入下面代码 return [ 'modules' => [ 'gii' => [ 'class' => ...
- c++内存区域结构及堆栈的一些知识
一.c++在内存区域的分配图 可以看出,对于Linux系统下的,存储空间的分配有着较为层次清晰的分层.单片机大概也遵循这个分区架构. 二进制代码以及常量(CONST修饰)以及全局变量在最底层,存储空间 ...
- hdu 6216 A Cubic number and A Cubic Number【数学题】
hdu 6216 A Cubic number and A Cubic Number[数学] 题意:判断一个素数是否是两个立方数之差,就是验差分.. 题解:只有相邻两立方数之差才可能,,因为x^3-y ...
- bzoj2331 [SCOI2011]地板
Description lxhgww的小名叫“小L”,这是因为他总是很喜欢L型的东西.小L家的客厅是一个的矩形,现在他想用L型的地板来铺满整个客厅,客厅里有些位置有柱子,不能铺地板.现在小L想知道,用 ...
- Perl 修改文件内容
把test.txt文件中的字符aaa替换成bbb perl -pi -e "s/aaa/bbb/gi" test.txt 把test.txt文件中的字符aaa替换成bbb,并生成一 ...
- BZOJ3999:[TJOI2015]旅游(树链剖分)
Description 为了提高智商,ZJY准备去往一个新世界去旅游.这个世界的城市布局像一棵树.每两座城市之间只有一条路径可 以互达.每座城市都有一种宝石,有一定的价格.ZJY为了赚取最高利益,她会 ...
- mac git 命令自动补全
步骤如下: 1.下载Git-completion.bash 或者直接使用SourceTree去clone到本地. 下载地址:https://github.com/markgandolfo/git-ba ...
- java8的4大核心函数式接口
//java8的4大核心函数式接口//1.Consumer<T>:消费性接口//需求:public void happy(double money, Consumer<Double& ...
- Tomcat的批处理
Tomcat的启动和关闭 来源 本文摘抄自 <Tomcat内核设计剖析> 一书. Tomcat的批处理 Tomcat的启动.关闭批处理脚本在/bin目录下. startup.bat 第 ...
- java 中重载(Overload)和重写(Override)的区别
首先重载和重写是应用于两个不同场景下面的两种不同的手段: 两者各自的特征: 重载(Overload):首先是位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不 ...