集合框架的一些问题(持续更新)

集合框架的一些问题(持续更新)
 
在这里主要列出一些学习java 集合框架碰到的问题和一些解决的方法,以便记忆。
目录
集合框架的结构图( 06 10 15
基于数组的 API 与基于 collection API 之间充当桥梁的三个方法( 06 10 15
集合框架的好处是什么?(06年10月16日)
 
 
 
 
 
集合框架的结构图
 
 
 
 
 
 
基于数组的 API 与基于 collection API 之间充当桥梁的三个方法
由于Java平台的API大部分是集合框架建立之前设计的,因此有时必须在老数组和向量与更新型的集合之间进行转换。
 
 
Vector v = new Vector();
v.add(“I”);
v.add(“am”);
v.add(“pig”);
//String[] sv = (String[])v.toArray();  <--在这里不能使用v.toArray(),因为即使知道要转换的数组类型是String[],toArray()也无法转换成String[]
String[] sv = (String[])v.toArray(new String[0]);//
HashSet hs = new HashSet(v);
HashSet hs2 = new HashSet(Arrays.asList(sv);
 
 
API中关于 基于数组的 API 与基于 collection API 之间充当桥梁的三个方法的描述。
asList
public static <T> List<T> asList(T... a)
返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直写”到数组。) 此方法同 Collection.toArray 一起,充当了基于数组的 API 与基于 collection API 之间的桥梁。返回的列表是可序列化的,并且实现了 RandomAccess
此方法还提供了一个创建固定长度的列表的便捷方法,该列表被初始化为包含多个元素:
     List stooges = Arrays.asList("Larry", "Moe", "Curly");
参数:
a - 支持列表的数组。
返回:
指定数组的列表视图。
另请参见:
 
 
toArray
Object[] toArray()
返回包含此 collection 中所有元素的数组。如果 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。
返回的数组将是“安全的”,因为此 collection 并不维护对返回数组的任何引用。(换句话说,即使 collection 受到数组的支持,此方法也必须分配一个新的数组)。因此,调用方可以自由地修改返回的数组。
此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。
返回:
包含此 collection 中所有元素的数组
 
 
toArray
<T> T[] toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将根据指定数组的运行时类型和此 collection 的大小分配一个新数组。
如果指定的数组能容纳 collection 并有剩余空间(即数组的元素比 collection 的元素多),那么会将数组中紧跟在 collection 末尾的元素设置为 null。(这对确定 collection 的长度很有用,但 只有 在调用方知道此 collection 没有包含任何 null 元素时才可行。)
如果此 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。
toArray 方法一样,此方法充当了基于数组的 API 与基于 collection API 之间的桥梁。更进一步说,此方法允许在输出数组的运行时类型上进行精确控制,并且在某些情况下,可以用来节省分配开销。
假定 l 是只包含字符串的一个已知 List。以下代码用来将该列表转储到一个新分配的 String 数组:
     String[] x = (String[]) v.toArray(new String[0]);
 
注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。
参数:
a - 存储此 collection 元素的数组(如果其足够大);否则,将为此分配一个具有相同运行时类型的新数组。
返回:
包含此 collection 元素的数组
抛出:
ArrayStoreException - 指定数组的运行时类型不是此 collection 每个元素运行时类型的超类型。
NullPointerException - 如果指定的数组为 null。
 
 

集合框架的好处是什么?

它减少了程序设计的辛劳。集合框架通过提供有用的数据结构和算法使你能集中注意力于你的程序的重要部分上,而不是为了让程序能正常运转而将注意力于低层设计上。通过这些在无关API之间的简易的互用性,使你免除了为改编对象或转换代码以便联合这些API而去写大量的代码。
(有了这个理由就足够了)


  它提高了程序速度和质量。集合框架通过提供对有用的数据结构和算法的高性能和高质量的实现使你的程序速度和质量得到提高。因为每个接口的实现是可互换的,所以你的程序可以很容易的通过改变一个实现而进行调整。另外,你将可以从写你自己的数据结构的苦差事中解脱出来,从而有更多时间关注于程序其它部分的质量和性能。

  减少去学习和使用新的API 的辛劳。许多API天生的有对集合的存储和获取。在过去,这样的API都有一些子API帮助操纵它的集合内容,因此在那些特殊的子API之间就会缺乏一致性,你也不得不从零开始学习,并且在使用时也很容易犯错。而标准集合框架接口的出现使这个问题迎刃而解。

  减少了设计新API的努力。设计者和实现者不用再在每次创建一种依赖于集合内容的API时重新设计,他们只要使用标准集合框架的接口即可。

  集合框架鼓励软件的复用。对于遵照标准集合框架接口的新的数据结构天生即是可复用的。同样对于操作一个实现了这些接口的对象的算法也是如此。

  有了这些优点,并通过合理的使用,它就会成为程序员的一种强大的工具。不过,从历史上来看,集合大多其结构相当复杂,也就给它们一个造成极不合理的学习曲线的坏名声。但是,希望Java2的集合框架能缩短你的学习曲线,从而快速掌握它。

  在许多高级语言中的数组其实也是集合的一种简单实现,比如C,C++,Pascal和Java。

  数组保存着相同类型的多个值,它的长度在数组被创建时就固定下来,建立之后就无法改变。如果你需要一种大小能动态改变的存储结构,数组就不适合了,这时集合框架就有了用武之地了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值