java高级应用编程_Java 高级应用编程 第二章 集合

一、Java 中的集合类

1、集合概述

Java中集合类是用来存放对象的

集合相当于一个容器,里面包容着一组对象 —— 容器类

其中的每个对象作为集合的一个元素出现

Java API提供的集合类位于java.util包内

2、Java 中数组与集合的比较

数组也是容器,它是定长的,访问较快,但是数组不会自动扩充

数组可以包含基本数据类型或引用类型的对象,而集合中只能包含引用类型的对象

3、Java 中集合框架层次结构

d2a7665fd9581cca738a716aca25379e.png

二、Colleciton 接口

1、一组称为元素的对象

2、一个Collection中可以放不同类型的数据

3、是Set接口和List接口的父类

4、是否有特定的顺序以及是否允许重复,取决于它的实现

5、Set - 无序的集合;不允许重复 HashSet

6、List - 有序的集合;允许重复

ArrayList、

LinkedList

1、Collection 接口

8d5a7b533b29a63086822c97c4153f87.png

b407d26d96efedfba05a9989ac2fa36a.png

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

050a2a8620d14efed2de42e96df27e06.png

5、List 接口的实现类

1、ArrayList是线性顺序存储的,是一种线性表

1、它的特性和数组很接近,数组大小是不变的,而ArrayList的大小是可以动态改变的

3、是数据结构中链表的java实现

4、相对于List来说,LinkedList最主要的功能方面的增强是可以在

List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现。所以它可以非常方便的实现我们数据结构中的常见的

Stack(栈)、queue(队列)等

ff549caf0cee8700c7cb15f15d732be4.png

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 接口

01229351ae48bf29729be136cc36867d.png

三、Collections 类

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

Collections 类中的方法

bec029b82db5d3fc2c88fee6ad41d192.png

0c1f611bcb69868e6ff1236b557aa2f8.png

四、Map 接口

Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象

Map是不同于Collection的另外一种集合接口Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的

Map接口有两个实现:

HashMap — key/value对是按照Hash算法存储的

TreeMap — key/value对是排序(按key排序)存储的

1、Map 接口

52696d369334cc114ce788aeb8fbfab6.png

a4403e5d35a7e6fdbe9bd879ea90a43d.png

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不允许。

五、集合类的选择

使用集合类时常见的异常

59bf79f17c6164c074a70af73764858c.png

b2643883931e69772a45aeb0b8557521.png

六、泛型的使用

1、集合在使用上的问题

集合中的add( )方法接受的是一个Object对象的参数 ,在获取集合中的对象时,必须进行造型(强制类型转换)操作。

造型操作可能出现问题,一般在程序运行时才能发生,发现问题比较困难。

2、集合中泛型的使用

在对象放入集合前,为其作个限制

在获取集合中的对象时,不用进行造型的操作

当有不同类型的对象添加到集合中的时候,编译时就能检查出错误

泛型经常被称为参数化类型,它能够像方法一样接受不同类型的参数。

定义方式

ArrayList 变量名 ;

E是变量类型

ArrayList arr;

arr = new ArrayList();

HashMap hm = new HashMap();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值