Java 中对象的集合类介绍

 Java中常见的集合对象:数组、List、Set、Map。

1、数组

数组与其它容器的区别体现在三个方面:效率、类型识别以及可以持有Primitives。

Arrays类(java.util.Arrays)——辅助类

包含了一组可用于数组的Static方法。

equals():比较两个数组是否相等。

fill():填充数组

sort():排序

binarySearch():用于在一个已排序的数组中查找元素的返回位置。(只能对排序后的数组使用此方法,不排序,无意义)

复制一个数组:System.arrayCopy(源数组,偏移量,目标数组,偏移量,拷贝数量)

Java中两种实现比较功能的方法

一是实现java.lang.Comparable接口

Arrays.sort(array),其中array中所含对象实现了comparable接口。

二是java.util.Comparator接口

实现此接口,需实现 int compart(object o1,object o2)

o1小于o2,返回-1;o1等于o2,返回0;o1大于o2,返回1。

Arrays.sort(array,ComparatorImpl)。

2、容器类

Collection包括List和Set。其中,List:必须按照特定的顺序持有这些元素;Set,不能保存重复的元素。

Map:一组以"键—值"(Key—Value)形式出现的Pair。

Collections(java.util.Collections)辅助类:

fill();只能为List工作,不能为Set和Map工作。

3、迭代器

Iterator:可遍历整个Collection,包括Vector、Stack。

4、容器类的应用

在理想情况下,绝对多数代码应该只同上述接口打交道,只是在创建容器的时候才要精确地指明它的确切类型,所以可以这样创建一个List。

List  list1  = new LinkedList()

List list2 = new ArrayList()

接口(interface)的优雅就在于,你想修改具体的实现的时候,只要改一下创建的声明就可以了。

1)、List的功能

擅长对元素进行随机访问的,较常用的ArrayList(常用)和更强大的LinkedList。LinkedList不是为快速的随机访问而设计的,但是它却有一组更加通用的方法。

ArrayList:一个用数组实现的List。能进行快速的随机访问,但是往列表间插入和删除元素的时候比较慢。

LinkedList:对顺序访问进行优化。在List中插入和删除元素的代价也不高。随机访问的速度较慢。不过有一些List接口中未定义的方法:addFirst()、addLast()、getFirst()、getLast()、removeFirst()和removeLast()。

2)、Set的功能

Set的接口就是Collection,所以不像List,没有额外的功能。加入Set的每个元素必须是唯一的。

HashSet:为优化查询速度而设计的Set。——(常用)

(SortedSet)TreeSet:是一个有序的Set,其底层是一颗树。这样就能从Set里面提取一个有序序列了。

LinkedHashSet(自JDK1.4):一个在内部使用链表的Set。既有HashSet的查询速度,又能保存元素被加进去的顺序(插入顺序)。

3)、Map的功能

Map接口维持键—值得关联(即Pairs),这样就能用键来找值了。

HashMap:基于Hash表的实现(用它来替代Hashtable)。——(常用)

LinkedHashMap:很像HashMap,但是用Iterator进行遍历的时候,它会按插入顺序或最先使用的顺序进行访问。除了用Iterator外,其它情况下,只是比HashMap稍慢一点。用Iterator的情况下,由于是使用链表来保存内部顺序,因此速度会更快。

(SortedMap)HashMap:一个Weak Key的Map。如果某个对象除了在Map当中充当键之外,在其它地方都没有其reference的话,,那它将被当作垃圾回收。

IdentityHashMap:一个用==,而不是equals()来比较键的HashMap。

默认的object.equals()只是简单地比较两个对象的地址。

 ArrayList和Vector的区别,HashMap和Hashtable的区别
答:就ArrayList与Vector主要从二方面来说.
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

就HashMap与HashTable主要从三方面来说.
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一实现
二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
三.值:只有HashMap允许在一个集合中有一个null键和在一个集合中有多个null值

Hashtable是HashMap的同步版本;HashMap允许有null值和一个null键,但是,Hashtable不允许有任何内容为null

Hashtable类的对象必须覆盖Object类的hashCode()和equals()方法

关于其他集合类型:
一.ArrayList 提供快速遍历和快速访问。现在设计了新的 RandomAccess 接口,它指出这种列表支持快速随机访问。Vector也实现了RandomAccess 接口。
二.遍历HashSet与HashMap时,其顺序是未知的(但添加删除快)。LinkedHashSet和LinkedHashSet是按照元素的插入的顺序遍历的(遍历快)。
三.TreeSet和TreeMap将保证元素按照元素的自然顺序进行排列。也可以使用一个用户自己实现的比较规则。
四、HashSet有一个散列表支持它。它为基本操作提供固定时间性能。TreeSet它确保了排序集将按元素升序,根据自然顺序排序。

Dictionary类
主要用于将关键字转换成值,该类接收一个关键字并返回一个值。Dictionary是一个抽象类,它是Hashtable的超类。
Properties类
扩展了Hashtable类,但Properties对象的关键字和值必须是String类型,并能将对象写入一个输出流并保存在一个文件中,然后可以把它读回一个输入流。


如果需要维护和搜索一个部件列表,它们由唯一的字母数字序列号标示,其中的部件是Part类型,这时应该使用哪种集合?如果我们改变需求,你也需要能够按顺序、按它们的序列号打印出部件?
1、应该选择HashMap
2、应该选择TreeMap

现在的Java都是分代垃圾机制:新代、旧代(对象时长的)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值