JAVASE基础_07.容器

  • Collection接口定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式
  1. Set中的数据对象没有顺序且不可以重复(equals算重复)
  2. List中的数据对象有顺序且可以重复
  • Map接口定义了存储”键-值“ 映射对的方法 

容器的特性:

  • 容器里装的必须都是对象(即引用类型,不能是基础数据类型)
  • 容器类型的toString() 方法所生成的String形式为:[Object0.toString() , Object1.toString().....]
  • 容器的remove()方法,判断这个对象是否和参数相同,使用equals判断(内容相同即可)
  • 容器类对象在调用remove、contains 等方法时需要比较对象是否相等,这会涉及到对象类型的 equals 方法和 hashCode 方法;对于自定义的类型,需要重写equals和hashCode 方法以实现自定义对象相等的规则(相等的对象应该具有相等的 hash codes)

一、Iterator 接口

  • 所有实现了Collection接口的容器类都有一个iterator() 方法用以返回一个实现了Iterator接口的对象
  • Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作
  • Iterator接口定义了以下方法

Iterator对一个容器进行操作时,会对容器进行一个锁定,只有Iterator本身可见容器内的元素,若下图 for 循环:

 

二、jdk1.5 增加的for循环

增强的for循环对于遍历array 或Collection 的时候相当简便

缺陷: 数组:不能方便的访问下标值      集合:与使用Iterator相比,不能方便的删除集合中的内容(在内部也是调用Iterator)

总结:除了遍历并读出其中的内容外,不建议使用for循环

 

三、Set接口

Set接口是Collection的子接口,Set接口没有提供额外的方法,但实现Set接口的容器类中的元素是没有顺序的,而且不能重复

Set容器可以与数学中的”集合“的概念相对应

JDK API 中 所提供的Set容器类有:HashSet  、TreeSet

 

四、List接口

List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复

List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素

JDK 所提供的List容器类有ArrayList,LinkedList等

List常用算法:

类java.util.Collections 提供了一些静态方法实现了基于List容器的一些常用算法

 

Comparable接口:

所有可以排序的类都实现了java.lang.Comparable 接口

Comparable接口中只有一个方法:public int compareTo(Object obj):返回0 this==obj   正数 this>obj    负数 this<this

实现了Comparable 接口的类通过实现 comparaTo 方法从而确定该类对象的排序方式

 

五、如何选择数据结构

衡量标准:读的效率和改的效率

  1. ArrayList 读快改慢
  2. LinkedList:改快读慢
  3. Hash两者之间

 

六、Map接口

实现Map接口的类用来存储 键—值 对

Map接口的实现类有 HashMap 和 TreeMap

Map类中存储的 键-值 对通过键来标识,所以键的值不能重复(equals() 方法,hashCode() 方法)

 

七、泛型

起因:JDK1.4 以前类型不明确

  1. 装入集合的类都被当作Object对待,从而失去自己的实际类型
  2. 从集合中取出往往需要转型、效率低,容易产生错误

解决办法:

  1. 在定义集合的同时定义集合中对象的类型
  2. 可以在定义Collection的时候指定,也可以在循环的时候用Iterator指定

好处:

  1. 增强了程序的可读性和稳定性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值