java集合包_Java集合包(一)——java.util.* 总述

一:宏观框架

cffb21abd0680e3c6f02aca89cbdf184.png

Java集合包,位于java.util.*下,主要包括4大部分:Collection集合接口及其实现类、Map映射接口及其实现类、集合迭代接口及其实现类、集合常用操作封装工具类。

注意:Java集合包中目前保留常用的类都是“非线程安全”的,只适用于单线程。其中遗留的几个线程安全的类实现都已过时,不再推荐使用,而是使用JUC包下对应的集合类。

二:Collection集合接口及其实现类

Collection集合包含 List和Set两大分支。

1、List是一个有序序列,每一个元素都有它的唯一索引,第一个元素的索引下标是0。

List的实现类主要有: LinkedList, ArrayList, Vector, Stack。

(01) LinkedList是链表实现的;它不是线程安全的,只适用于单线程。

(02) ArrayList是数组实现的,它是一个动态数组;它也不是线程安全的,只适用于单线程。

以下两个已过时:

(03) Vector是数组实现的矢量队列,它也一个动态数组;不过和ArrayList不同的是,Vector是线程安全的,它支持并发。但是不推荐使用,而是使用ArrayList对应高并发类 CopyOnWriteArrayList

(04) Stack是Vector实现的栈;和Vector一样,它也是线程安全的。但是不推荐使用,而是使用LinkedBlockingDeque。

2、Set是一个不允许有重复元素的集合。

Set的实现类有HastSet和TreeSet。

(01) HashSet是一个没有重复元素的集合,它底层通过HashMap实现的;HashSet不是线程安全的,只适用于单线程。

(02) TreeSet也是一个没有重复元素的集合,不过和HashSet不同的是,TreeSet中的元素是有序的;它是通过TreeMap实现的;TreeSet也不是线程安全的,只适用于单线程。

三:Map映射接口及其实现类

Map是一个映射接口,即key-value键值对。Map中的每一个元素都包含了“一个key”和“key对应的value”,以及key的hash值等其他内容。

Map的实现类主要有: HashMap,TreeMap、WeakHashMap, Hashtable。

(01) HashMap是存储“键-值对”的哈希表;它不是线程安全的,只适用于单线程。

(02) TreeMap也是哈希表,不过TreeMap中的“键-值对”是有序的,它是通过R-B Tree(红黑树)实现的;TreeMap不是线程安全的,只适用于单线程。

(03) WeakHashMap是也是哈希表;和HashMap不同的是,HashMap的“键”是强引用类型,而WeakHashMap的“键”是弱引用类型,也就是说当WeakHashMap 中的某个值引用不再正常使用时[变成弱引用],则键值对会被从WeakHashMap中被自动移除,值引用指向的对象也会被回收。WeakHashMap也不是线程安全的,只适用于单线程。

以下Map已过时:

(04) HashTable也是哈希表;和HashMap不同的是,HashTable是线程安全的,支持并发。但是不推荐使用,而是使用ConcurrentHashMap。

四:集合迭代接口及其实现类

集合迭代有两种方式:Iterator和Enumeration,其中Enumeration已过时。

1、Enumeration

Enumeration只能在Hashtable, Vector, Stack中使用,功能要比Iterator少,已过时。

packagejava.util;

public interface Enumeration{

booleanhasMoreElements();

E nextElement();

}

2、Iterator

支持fail-fast机制:当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast异常。

packagejava.util;

public interface Iterator{

booleanhasNext();

E next();

voidremove();

}

Iterator 比  Enumeration 的遍历速度稍慢一些,因为Iterator添加了对fail-fast机制的支持,所以慢一些。

五:集合常用操作封装工具类

1、Arrays

针对最常用的数组操作提供方法封装支持。

2、Collections

包含各种有关集合操作的静态方法。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/* * JCatalog Project */ package com.hexiang.utils; import java.util.List; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.Properties; import javax.mail.Session; import javax.mail.Transport; import javax.mail.Message; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.hexiang.exception.CatalogException; /** * Utility class to send email. * * @author <a href="380595305@qq.com">hexiang</a> */ public class EmailUtil { //the logger for this class private static Log logger = LogFactory.getLog("com.hexiang.util.EmailUtil"); /** * Send email to a single recipient. * * @param smtpHost the SMTP email server address * @param senderAddress the sender email address * @param senderName the sender name * @param receiverAddress the recipient email address * @param sub the subject of the email * @param msg the message content of the email */ public static void sendEmail(String smtpHost, String senderAddress, String senderName, String receiverAddress, String sub, String msg) throws CatalogException { List<String> recipients = new ArrayList<String>(); recipients.add(receiverAddress); sendEmail(smtpHost, senderAddress, senderName, recipients, sub, msg); } /** * Send email to a list of recipients. * * @param smtpHost the SMTP email server address * @param senderAddress the sender email address * @param senderName the sender name * @param recipients a list of receipients email addresses * @param sub the subject of the email * @param msg the message content of the email */ public static void sendEmail(String smtpHost, String senderAddress, String senderName, List<String> recipients, String sub, String msg) throws CatalogException { if (smtpHost == null) { String errMsg = "Could not send email: smtp host address is null"; logger.error(errMsg); throw new CatalogException(errMsg); } try { Properties props = System.getProperties(); props.put("mail.smtp.host", smtpHost); Session session = Session.getDefaultInstance(props, null ); MimeMessage message = new MimeMessage( session ); message.addHeader("Content-type", "text/plain"); message.setSubject(sub); message.setFrom(new InternetAddress(senderAddress, senderName)); for (Iterator<String> it = recipients.iterator(); it.hasNext();) { String email = (String)it.next(); message.addRecipients(Message.RecipientType.TO, email); } message.setText(msg); message.setSentDate( new Date() ); Transport.send(message); } catch (Exception e) { String errorMsg = "Could not send email"; logger.error(errorMsg, e); throw new CatalogException("errorMsg", e); } } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值