java中容器的细节


1.在java的API中容器接口联系图如下:


其中左边的Collection接口定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式,Collection容器存储时是一个一个进行存储的,二右边的Map是以key、value的键值对形式进行存储的。

(1) Set和List差异性:

1.Set存储的数据对象没有顺序且不可重复。(好比数学中的集合)

2.List存储的数据对象有序且可以重复。

所谓的重复就是两对象equals(而不是==),同时List集合中存储的是个对象而不能是一个int值,是个Object对象,可以是字符串。

注意:容器对象调用remove、contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和

hashCode方法,当集合中存储的是自定义的类型需要重写equals和hashCode方法以实现自定义对象相当规则。

当存入的对象是作为Map集合中的key值时,需要重写hashCode。

当需要重写该对象的equals方法时就必须重写改对象的hashCode方法,相等的对象应该具有相等的hash codes,在当前对象作为Map集合的key值是有用。

例如:c.add(new Name("f1","l1")); 需要下面重写hashCode和equals后才能使collention对象在调用remove(Object)方法时删除对应对象:c.remove(new Name("f1","l1"));




ArrayList和LinkedList区别:

1.ArrayList容器底层是用集合作为存储结构,是一个数组的形式,因此在进行元素搜一搜是效率较高于LinkedList;

2.LinkedList底层是用链表作为存储结构的,每个元素之间通过所用关联在一起,一次在进行删除是效率较高于ArrayList集合。

{ Array 读快改慢  、Linked 改快读慢 、Hash 两者之间 }


(2) Collection接口的子接口都实现的以下方法:



(3)Iterator 接口

1.所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现 了Iterator接口的对象

2.Iterator对象称作迭代器,用以方便实现对容器内元素的遍历操作。

3.Iterator接口定义的下面方法:

boolean hasNext();//判断游标右边是否还有元素

object next(); //返回游标右边的元素

void remove(); //删除游标左面元素,在执行完next后改操作只能执行一次

用法:



  Iterator对象的remove方法是在迭代过程中删除元素的唯一的安全方法:




(4) List常用算法

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

void sort(List)  //对list容器内的元素排序

void shuffle(List) //对容器内的对象进行随机排序

void reverse(List)  //对List容器内对象逆序排序(LinkedList效率高于ArrayList)

void fill (List,Object) //用一个特定对象重写整个List容器

void copy(List dest,List src);

int binarySearch(List , Object);//对于顺序的List容器,采用折半查找的方法查找特定对象。



(5) Comparable接口

在(4) 中讲到容器的一系列排序算法,那么对于容器中的元素对象是按照什么方式来进行排序的呢?可想而知 所有可以“排序” 的类都实现了 java.lang.comarable接口,comparable接口中只有一个方法 

public int compareTo(T o);//这里用到的是泛型;

返回 0 表示 this==obj 

返回 正数 表示 this > obj 

返回 负数 表示 this < obj

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

Name类是实现Comparable接口,重写compareTo方法:(字符串的比较大小)




(5) Map 接口

1.以键值对存储

2.实现类有HashMap 和 TreeMap    hansMap是以hash表作为索引,treeMap是以二叉树做索引;

3.Map是以键作为标示,所以键值不能重复(键值之间必须equals ,但为了效率高用hashCode比较)

删除









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值