dysfzhoulong 发表于 2013-1-26 15:47:40

java集合框架

Java集合就像一种容器,我们可以将多个对象(实际上是对象的引用,但习惯上都称为对象)“丢进”容器。

集合框架图(所画为常用关系)http://dl.iteye.com/upload/attachment/431433/b41eaef1-6123-3d7a-882b-b2b06394120a.jpg

http://dl.iteye.com/upload/attachment/431435/e65bd724-b657-32dc-bbe0-938ba14a0e75.jpg
HashSet :
      1、不能保证元素的排列顺序,顺序有可能发生改变;
      2、HashSet不是同步的,多个线程访问一个HashSet时,必须通过代码来保证其同步;
      3、集合元素可以是null;
当向HashSet中存入元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode(),然后根据HashCode值决定对象在HashSet中存储位置。如果有两个元素通过equals方法比较返回true,但他们的hashCode()方法返回值不相等,HashSet会将它们放在不同的位置;
简单的说,两个元素相等的标准是:equals相等、hashCode()相等;
测试
public class A {public boolean equals(Object obj) {return true;}}public class B {public int hashCode() {return 1;}}public class C {public int hashCode() {return 2;}public boolean equals(Object obj) {return true;}}public class Test {public static void main(String args[]) {HashSet set = new HashSet();// set中添加对象set.add(new A());set.add(new A());set.add(new B());set.add(new B());set.add(new C());set.add(new C());System.out.println(set);}}结果:ArrayList,Vector,LinkedList
    ArrayList,Vector都是基于数组实现的List的类,它们最显著的区别是:ArrayList是线程不安全的,而Vector是线程安全的,所以性能上要比ArrayList低。Vector还提供了一个Stack子类,它用于模拟“栈”这个数据结构;
   LinkedList是基于链表实现的List类,可以根据索引随机访问集合中的元素,可以当作List使用,另外它也实现了Deque接口,Deque接口是Queue接口的子接口,它代表一个双向队列,根据Deque中的方法,它中以当作双向队列和“栈”使用;与前两种实现类相比而言,它更适合插入、删除元素(只要改变指针所指的地址即可),基于数组实现ArrayList,Vector则更适合随机访问;数组在实现机制上是以连续内存区保存元素;

HashMap,Hashtable
    Hashtable是一个线程安全的Map实现类,HashMap是线程不安全的实现类,所以性能上要比Hashtable高,Hashtable不允许null作为key、value,如果试图插入null时会报NullPointException异常,但是HashMap则可以;

操作集合的工具类Collections,该工具类提供了大量的方法对集合元素进行排序、查找和修改等操作,还提供了将集合对象设置为不可变,对集合对象实现同步控制等方法。
页: [1]
查看完整版本: java集合框架