集合之LinkedList、Vector、HashMap、Hashtable

本文深入解析Java集合类中的LinkedList、Vector、HashTable与ArrayList的特点与区别,包括它们的基本方法、同步性、线程安全、数据增长策略等,为开发者提供全面的集合类使用指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * 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());
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值