【2019秋冬】《Java核心技术》第9章 集合

Java集合将接口和实现分离
集合的基本接口是Collection

public interface Collection<E>
{
	boolean add(E element);
	Iterator<E> iterator();
	......
}

Iterator是迭代器

public interface Iterator<E>
{
	E next();
	boolean hasNext();
	void remove();
	default void forEachRemaining(Consumer<? super E> action);
}

通过调用next,访问每一个元素,如果访问不到返回异常,所以在调用next之前要使用hasNext进行查询
Java迭代器认为是位于两个元素之间,当调用next时,迭代器越过一个元素,并返回越过的元素
在调用remove之前,要先使用next,越过要删除的元素,否则会抛出异常

集合都继承于Collection和Map接口
Collection:
——List
————LinkedList 链表,方便插入删除,不同步,线程不安全
————ArrayList 数组,方便查找,不同步,线程不安全
————Vector 数组,方便查找,不同步,线程安全
————Stack 继承自vector

——Set
————HashSet 底层为散列表,用哈希算法保证插入值唯一,无序
————LinkedHashSet 加入链表保证插入顺序不变
————TreeSet 有序,底层使用二叉树,内部使用红黑树排序,

——Queue

Map:
——HashMap 不同步,线程不安全,对键进行散列,不对值进行操作
——HashTable 同步,线程安全
——TreeMap 用键的整体顺序对元素排序,底层为二叉树,排序使用红黑树

List与Set区别
1.List中元素是有序的,元素可重复,可根据索引获取元素
2.Set中元素是无序的,元素是唯一的,不能根据索引获取元素

ArrayList与LinkedList异同
ArrayList不同步,线程不安全,底层实现是数组,可用索引直接定位元素,方便查找,不方便进行增删操作
LinkedList不同步,线程不安全,底层实现是链表,不能用索引直接定位元素,可以使用迭代器进行查找,方便增删操作,不方便查找

ArrayList与Vector异同
ArrayList与Vector都是数组实现,方便查找。ArrayList不同步,线程不安全,默认扩张因数为1.5。Vector可同步,线程安全,可自己设置扩张因数。

HashSet具体实现唯一性的比较过程:
存储前使用哈希算法生成一个哈希值
将这个值与已存储的哈希值进行对比
如果没有相同,直接存储到哈希值对应的位置
如果存在相同,调用equals方法,判断内容是否相同,如果相同不存储。
如果内容不相同,采取地址冲突算法解决,在当前哈希值处建立一个新链表存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值