Java容器介绍

一、分类

容器主要包含 Collection 和 Map,Collection 存储的是对象集合(单个对象),而 Map 存储的是键值对(两个对象)的映射表。

Collection

在这里插入图片描述

  • Set:无顺序,元素不可重复。
  • List:有顺序,元素可重复。
  • Queue:先进先出(FIFO)。
1、Set
  • TreeSet基于红黑树实现,支持有序性操作,例如根据一个范围查找元素的操作。但查找效率不如 HashSet ,HashSet查找的时间复杂度为O(1),TreeSet的则是O(logN)。
  • HashSet基于哈希表实现,支持快速查询,但不支持有序性操作,并且失去元素插入顺序信息。
  • LinkedHashSet基于双向链表和哈希表实现,具有HashSet的查找效率,内部使用双向列表维护元素的插入顺序。
2、List
  • ArrayList基于动态数组实现,支持随机查询。线程不安全,访问速度快。
  • Vector:和ArrayList类似,支持随机查询,但线程安全,访问速度慢。
  • LinkedList基于双向链表实现,只能顺序访问,但可以快速的在链表中间插入或删除元素。可以使用LinkedList作为栈,队列,双向队列。
3、Queue
  • LinkedList基于双向链表实现,可以用它来实现双向队列。
  • PriorityQueue基于堆结构实现,可以用它来实现优先队列。

Map

在这里插入图片描述

  • TreeMap基于红黑树实现
  • HashMap基于哈希表实现
  • Hashtable:和 HashMap 类似,但它是线程安全的,这意味着同一时刻多个线程同时写入Hashtable 不会导致数据不一致。这是遗留类,不应该使用它,使用ConcurrentHashMap支持线程安全,且ConcurrentHashMap效率更高,因为它使用的是分段锁。
  • LinkedHashMap基于双向链表实现,使用双向链表维护元素的顺序,顺序为插入顺序或者最近最少使用(LRU)顺序。

二、容器中的设计模式

迭代器模式

在这里插入图片描述

  • 迭代器模式:让用户通过特定的接口访问容器的数据,不需要了解容器内部的数据结构。
  • Iterator : 迭代器对象
public interface Iterator<E> {
	boolean hasNext();//判断是否有下一个元素
	E next();//将游标指向下一个元素
}
  • Iterable :容器实现Iterable接口,获取迭代器对象
public interface Iterable<T> {
	Iterator<T> iterator();//获取迭代器对象
}

适配器模式

  • 适配器模式:将一个类的接口转换成客户希望的另外一个接口,让原来不兼容的两个接口协同工作。
  • java.util.Arrays#asList() 可以把数组类型转换为 List 类型
public static <T> List<T> asList(T... a) {
	return new ArrayList<>(a);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值