/*
* LinkedList链表
* LinkList也是集合中需要掌握的五个类之一
* LinkedList常用的方法:
* add(object):添加元素的方法
* remove(index):删除元素的方法
* size():获取元素的个数
* get(index):获取元素
* addFirst(object):把对象加在链表的最前面,ArrayList没有这个方法
* getFirst():从链表的表头开始去(栈的入口处),ArrayList没有这个方法
* remove方法还有removeAll()/removeFirst()/removeFirst()
*/
//使用集合必须加载util包
import java.util.*;
public class Demo5 {
public static void main(String[] args){
//定义LinkedList对象
LinkedList ll=new LinkedList();
//定义Clerk队形
Clerk clerk=new Clerk("1","sevend",1009);
Clerk clerk2=new Clerk("2","kenvon",1009);
//把clerk对象加在链表的最前面,同理哈有addLast(object)方法
ll.addFirst(clerk);
ll.addFirst(clerk2);//栈的方式,会加在clerk之前
//遍历的方法
System.out.println("sevend先添加,kenvon后添加,遍历结果:");
for(int i=0;i<ll.size();i++){
System.out.println(((Clerk)ll.get(i)).getClerkName());//getFirst()也是LinkedList特有的方法
}
}
}
/*
* Vector(向量)类
* 方法及使用和前面的大同小异,仿照前面的就可以了
* HashTable
* 基本和hashmap的用法一致
* hashmap和hashtable的区别
* 都是java的集合类
* hashtable是基于陈旧的dictionary类的,hashmap是在java1.2后引进的Map接口的一个实现
* 同步性:hashtable是同步的,线程同步,这个类中的对象保证了线程是安全的,hashmap是异步的,是线程不安全的,如果
* 不要求线程的安全性,应该优先选择hashmap
* 什么是同步:
* 几个线程操作同一张表的时候就会出现同步问题,hashtable会拒绝同时访问加锁,按照队列的顺序来一个一个处理访问,这样的机制是安全的,但是会损失一定的效率,hashmap则没有这个机制
* hashmap允许将一个空值作为条目的key或者value,但是hashtable则不允许,二者的选择从同步性上考虑
* arraylist和vector
* 同步性:ArrayList是异步的,是不安全的,vector是同步的,是安全的,不涉及同步的话,用arraylist,同步的话肯定要用vector
* 数据增长:他们都是使用数组来控制集合中的对象的,但是这个数组是动态的,当向其中增加元素的时候,如果元素的数目超出了内部数组的长度,他们则都需要扩大内部数组的长度,vector在缺省
* 的情况下是增长原来的一倍,而arraylist是按照原来的50%来增长的,如果数据量大的时候,就应该选择vector类型
* 集合的几个类的总结:
* 如果要求线程安全,使用vector或者hashtable
* 如果不要求线程安全,使用arraylist linkedlist和hashmap
* 如果要求键值是,使用hashmap和hashtable
* 如果存放的数据量大,并且还要考虑线程安全,则使用vector
*/
import java.util.*;
public class Demo6 {
public static void main(String[] args){
//定义vector对象
Vector vector=new Vector();
//定义clerk对象
Clerk clerk=new Clerk("1","sevend",1009);
Clerk clerk2=new Clerk("2","kenvon",1009);
//添加对象元素
vector.add(clerk2);
vector.add(clerk);
//元素的遍历
for(int i=0;i<vector.size();i++){
System.out.println(((Clerk)vector.get(i)).getClerkName());
}
}
}