面相对象-学习笔记-java容器与泛型

来源:互联网 发布:语义搜索python 编辑:程序博客网 时间:2024/04/30 14:27

什么是容器?
容器就是装东西的器皿。

Java中的容器是什么?

Java容器是装对象的器皿;是JavaAPI所提供的一系列类的实例,用于在程序中存放对象。
数组就是一种容器。数组长度一旦给定以后,就不能改变了,要想改变长度,只有一种办法就是重新new一个新数组出来,把那个数组copy进来。

1 remove一个对象,他会把容器里面的对象挨着个的拿出来,比较两个对象是否equals,如果equals,就去掉容器中的这个对象。
2 hashcode()方法可以找着这个对象在内存中的地址,但不是物理地址,用这个方法非常适合做索引。
3 在一个类中要重写equals方法,那就必须重写hashcode方法,两个对象要equals,两个对象就必须具有相同的hashcode。这就相当于查字典,索引就是hashcode,通过这个索引查出的字就是对象,两个字要相等,那么他的索引肯定是一样的。
4 Object中的equals方法比较的是两个对象是否是同一个对象,即是否是同一个引用,和用“==”比较两个对象是一样的。
5 什么时候会用到hashCode方法?当你这个对象作为索引的时候。
6 ArraList是底层以数组实现存储的提供List接口的容器。
7 LinkedList是底层以链表实现存储的提供List接口的容器
8 Collection接口里面有一个iterator方法,这个方法实际上是有多态存在的。

什么是Iterator接口?
是统一的用来遍历Collection的所有元素的这样一种接口。
Iterator这个东西可以把它当做一个指针,一个游标,当你第一次拿到iterator的时候,它指向第一个元素的左边。每一种不同的容器它有不同的实现。
1 在1.4版本和以前的版本中,Iterator接口中的iterator方法,用iterator时,会锁定容器中的所有对像,只有iterator中remove方法能去掉对象,不能使用容器中的remove方法。
2 foreach循环内部实现也是iterator。
3 一个类中的对象可以调用Collections.sort()算法,那么它必定已经实现了Comparable接口。

Map类中存储的键-值通过键来标识,所以键值不能重复。重复比较的是equals,但是比较equals效率低,可以直接比较其hashCode,比较int值,效率高。

泛型Generic

1 为什么要使用泛型,1.4以前类型不明确,比如说往map里面装一对象,装进去就把这个对象当成一个Object了,把它当成一个父类了,它自身的一些特色就已经丢失了。当你再拿出来时需要进行强制的转换,强制转换的效率是比较低的,并且容易产生错误,而且是运行时出现的问题。违背了设计程序时尽量使错误提前到编译时的稳定性原则。

2 泛型指定你这个容器只能装我指定类型的对象。

泛型怎么写?
就是一个尖括号<>中间写上我要装类型的名字。
那么什么东西后面可以跟尖括号?
去查api文档,那个类或者接口后面跟有<E>E为Element或者其他<>,那么这个类就使用了泛型。
使用:在定义集合的时候同时定义集合里面对象的类型。
自动打包/解包与泛型分别解决了基本数据类型和包装类之间的强制转换与Object和某个具体类之间的强制转换都存在的效率低下的问题。




总结:
一个图


一个类 Collections :这个类封装了一些常用的list的算法。 比方说sort(),shuffle()以及binarySearch()等。

三个知识点

1 增强的for循环(内部是以iterator实现的)
2 Generic 泛型 非常重要
3 Auto-boxing/unboxing

六个接口
Collection 容器的最上层接口
Set接口
List接口
Map接口
Iterator接口 标准的,统一的来遍历Collection的一种方式。
Comparable接口 来定义这个类的两个对象之间谁大谁小。

以下为视频截图:


 

 

0 0
原创粉丝点击