java之容器类

java之容器类


前言

关于容器的一些总结(有图有文字)


一、先上图了

喜欢在这里插入图片描述

二、接着是文字了

泛型:
由于jdk1.4之前的类型不明确,装入集合的类型都被当做Object对待、失去自己的实际类型。从集合中取出时大多需要强制转型,效率低。

解决方法:在定义集合的时候同时定义(指定)集合中对象的类型。如 ArrayList < Apple> 而不仅仅只是ArrayList。尖括号中的是类型参数,可以有多个,其指定了容器实例中可以保存的类型。

通过使用泛型,就可以在编译期防止将错误类型的对象放置到容器中,并且向上转型(父类对象的引用指向子类对象)也可以像作用于其他类型一样作用于泛型。

class Fuji extends Apple { }

public class Test {
  public static void main (String [ ] args){
    ArrayList<Apple> apples = new ArrayList <Apple> (); 
    apples.add (new Fuji ( ) );
    // 即可以将 Apple 的子类型添加到被指定为保存Apple对象的容器中
    } 
}

容器:如果有一个类专门用来存放其它类的对象,这个类就叫做容器(集合),容器就是将若干性质相同或相近的类对象组合在一起而形成的一个整体(数组也是容器的一种

容器与数组的区别
数组是固定长度的、只能保存特定类型(基础或引用)、且必须是同一个数据类型。
容器是长度可变的、只能存储引用类型、可以是不同数据类型,缺点效率比数组低。

类图结构
在这里插入图片描述

Collection:一个独立元素的序列。定义了一个一个的往里面装的这种容器 对外可以提供的方法。
其子接口有:
Set(没有顺序,不可以重复。基于对象的值来确定归属性)
List:(1、有顺序,可以重复。2、List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取其中的元素)

Collection中一些方法运用需要注意的问题
1、容器类对象在调用remove、contains 等方法时需要比较对象是否相等。
何为相等?如: 查字典、将索引看作一个对象,将 根据索引查到的字看作一个值。则索引与索引对应的值都得一样。且相等的对象应该具有相等的hash codes。
2、所以重写equals方法必须重写hashcode方法。(那么hashcode方法什么时候用到呢? 当对象被当作索引即键值时会使用hashcode方法)
3、对于自定义的类型,需要重写equals 和
hashcode方法 目的是实现自定义的对象相等规则

问:如何能不重写代码就可以应用于不通过类型的容器?迭代器可以解决这个问题
迭代器:其工作是遍历并选择序列中的对象,程序员不必知道或担心该序列底层的结构。
如java的接口Iterator(只能单向移动)
1、所有实现Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象
2、boolean hasNext():判断游标右边是否有元素
3、Object(E) next():返回游标右边的元素并将游标移动到下一个位置
4、void remove():删除游标左边的元素。在执行完next之后只能执行一次(删除元素的唯一安全方法
5、forEachRemaining():方法内部是通过使用迭代器Iterator遍历所有元素、第二次调用不会做任何操作,因为不会有下一个元素(从1.8开始

Map:定义了存储“键-值映射对”的方法、一对一对的装。(不能包含重复的键值,每个键最多只能映射一个值。)将数字与对象关联在了一起(如字典)

待更新…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值