韩顺平 java 第21讲、第22讲、第23讲、第24讲 集合

为什么用集合?

想象一下,当你要做一个公司职员薪水管理系统的时候,不先考虑数据库,这时候如果用数组的话,固然是可以的,但是数组很不方便,因为数组的大小把握不了,当有员工的增加或者删除的时候,可能会导致数组的大小不够或者数组浪费。
当然可以用链表来解决,但是链表还不是最佳选择,这就引出了集合。可以动态的添加和修改。

java 集合类

  1. List结构的集合类:ArrayList类、LinkedList类、Vector类、Stack类
  2. Map结构的集合类:HashMap类、HashTable类
  3. Set结构的集合类:HashSet类、TreeSet类
  4. Queue结构的集合:Queue接口

ArrayList

首先引入包

import java.util.*;

然后定义ArrayList对象

ArrayList a = new ArrayList();
a_size = a.size();//a_size = 0,此时的大小为0

//向a中添加数据,类型是Object,也就是说可以添加任意类型的数据
Clerk clerk1 = new Clerk("song",50);
a.add(clerk1);//将元素加到列表的尾部,此时a的大小就是1了
Clerk clerk2 = new Clerk("wu",20);
a.add(clerk2);

//如何访问a中的数据?
//Clerk temp = a.get(0);这句错误,因为get函数返回的是Object类型。把一个子类交给一个父类,可以自动转换,但是把一个父类交给一个子类就不行了,可以强制转换
Clerk temp = (Clerk)a.get(0);//取出第一个数据,这里和数组的下标差不多

//遍历所有的数据
for(int i =0;i < a.size();i++){
    Clerk temp = (Clerk)a.get(i);
    //.....
}
a.add(clerk1);//再次放一次也可以!

//删除元素
a.remove(1);

LinkedList

很多方法和ArrayList都差不多但是多了下列几个:

LinkedList ll = new LinkedList();
ll.addFirst(a1);//把a1加在最前面
ll.addLast(a2);//把a2加在最后面
ll.remove(1);

Vector 向量

多数方法和上面类似,但是区别是,

Stack 栈

HashMap

HashMap hm = new HashMap();
hm.put("01",emp1);
hm.put("02",emp2);
hm.put("02",emp3);//此时,“02”对应的值更新了,Key值不能相同!
if(hm.containKey("02")){
    Emp emp = (Emp)hm.get("01");
}
Iterator it = hm.keySet().iterator();
while(it.hasNext()){
    String key = it.next().toString();
    Emp emp = (Emp)hm.get(key);
}

HashMap 和HashTable区别

  • HashTable是同步的,这个类中的一些方法保证了HashTable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率。
  • HashMap可以让你将一个空值作为一个表的条目的key或velue,但是HashTable是不能放入空值的。

ArrayList 和 Vector的区别

  • Vector是同步的,Arraylist是异步的。
  • 从内部机制来讲二者都是用数组来控制集合中的对象。如果长度增加超过了内部数组的长度,它们需要增加目前的长度来扩展内部数组的长度,Vector缺省情况下自动增长原来的一倍,ArrayList是原来的50%。

总结

  1. 如果考虑线程安全,考虑:Vector,HashTable
  2. 如果不要求线程安全:ArrayList、LinkedList、HashMap
  3. 如果要求键值对,则使用HashMap、HashTable
  4. 如果数据量很大,又要线程安全,则Vector
  5. 其实这些都可以用到java中的多态,这样更加灵活,比如:
    List l = new ArrayList();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章