参考:
http://www.360doc.com/showWeb/0/0/1833598.aspx
http://zzg810314.javaeye.com/blog/83342
http://episode.javaeye.com/blog/113005
Collection :List 、 Set
Map :HashMap 、HashTable
一、Array , Arrays
Java 所有“ 存储及随机访问一连串对象” 的做法,array 是最有效率的一种。
1 、
效率高,但容量固定且无法动态改变。
array 还有一个缺点是,无法判断其中实际存有多少元素,length 只是告诉我们array 的容量。
2.
Java 中有一个Arrays 类,专门用来操作array 。
arrays 中拥有一组static 函数,
equals() :比较两个array 是否相等。array 拥有相同元素个数,且所有对应元素两两相等。
fill() :将值填入array 中。
sort() :用来对array 进行排序。
binarySearch() :在排好序的array 中寻找元素。
System.arraycopy() :array 的复制。
二、Collection , Map
若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array 不适用。
1 、Collection 和 Map 的区别
容器内每个为之所存储的元素个数不同。
Collection 类型者,每个位置只有一个元素。
Map 类型者,持有 key-value pair ,像个小型数据库。
2 、各自旗下的子类关系
Collection
-- List : 将以特定次序存储元素。所以取出来的顺序可能和放入顺序不同。
--ArrayList / LinkedList / Vector
-- Set : 不能含有重复的元素
--HashSet / TreeSet
Map
-- HashMap
-- HashTable
-- TreeMap
3 、其他特征
* List ,Set ,Map 将持有对象一律视为Object 型别。
* Collection 、List 、Set 、Map 都是接口,不能实例化。
继承自它们的 ArrayList, Vector, HashTable, HashMap 是具象class ,这些才可被实例化。
* vector 容器确切知道它所持有的对象隶属什么型别。vector 不进行边界检查。
三、Collections
Collections 是针对集合类的一个帮助类。 提 供了一系列静态 方法实现对各种集合的搜索、排序、线程完全化等操作。
相当于对Array 进行类似操作的类——Arrays 。
如,Collections.max(Collection coll); 取coll 中最大的元素。
Collections.sort(List list); 对list 中元素排序
四、如何选择?
1 、容器类和Array 的区别、择取
* 容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy 一份至数列某位置。
* 一旦将对象置入容器内,便损失了该对象的型别信息。
2 、
* 在各种Lists 中,最好的做法是以ArrayList 作为缺省选择。当插入、删除频繁时,使用LinkedList() ;
Vector 总是比ArrayList 慢,所以要尽量避免使用。
* 在各种Sets 中,HashSet 通常优于HashTree (插入、查找)。只有当需要产生一个经过排序的序列,才用TreeSet 。
HashTree 存在的唯一理由:能够维护其内元素的排序状态。
* 在各种Maps 中
HashMap 用于快速查找。
* 当元素个数固定,用Array ,因为Array 效率是最高的。
java 中 null 与 "" 的区别
一直都蛮疑惑这个问题,今天找了下资料,结论如下:
null
无效的 ; 无价值的,
其在内存中没有分配地址
""
空字符串,但是也是字符串。
其在内存中已经分配地址
有个说法:
好比做饭 null 说明连锅都没有 而 "" 则是有锅没米
虽然二者看起来都是没有米 但是意义却不同