java学习记录:java集合框架(更新中)

Java集合框架概述

集合接口与实现分离

collection接口

collection接口是java类库中集合类的基本接口,其中包含两个基本方法:

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

1.add()方法用于向集合中添加元素,若确实改变集合则返回true
2.iterator()用于返回一个实现了迭代器接口的对象

其他方法:(待补全)

{
	...
	int size();
	boolean isEmpty();
	...
}

迭代器

Iterator接口包含四个方法:

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

1.通过反复调用next()方法可以逐个访问集合中的 每个元素,但若到集合末尾,next()方法将抛出一个NoSuchElementException异常
2.为避免异常的抛出,使用next()方法之前应当先调用hasNext()方法。如果迭代器对象还有多个供访问元素,这个方法就返回true,以此作为判据来反复调用next()方法

*编译器简单地将“for each”循环翻译为带迭代器的循环*

3.remove()方法将会删除上次调用next()方法时返回的元素,这两个方法的调用具有相互依赖性,调用remove()之前没有调用过next()是不合法的(抛出IllegalStateException异常)
4.在Java SE 8中,甚至可以不用写循环,调用forEachRemaining()方法并提供一个lambda表达式,将会对迭代器的每一个元素调用这个表达式,直至没有下一个元素为止

元素被访问的顺序取决于集合类型,如果对ArrayList进行迭代,迭代器将会从索引0开始,每迭代一次索引值增加1;如若访问HashSet中的元素,每个元素将会按照某种随机的次序出现。虽然可以确定迭代过程能够遍历集合中每个元素,但无法预知访问次序

泛型实用方法(待更新)

集合框架中的接口:

集合框架的接口
1.集合有两个基本接口:Collection和Map
一般来说,可以通过add方法在集合中插入元素,但由于映射存在键值对,所以要使用put方法插入:
V put(K key,V value)
从集合中读取元素,可以通过迭代器访问元素。但从映射中读取值则需要用到get方法:
V get(K key)
2.List
List是一个有序集合,元素会增加到容器中的特定位置,访问元素可以通过迭代器或者一个整数索引。
通过整数索引的方法称为随机访问(可以按照任意顺序访问元素)
List接口定义了多个用于随机访问的方法:
void add(int index,E element)
void remove(int index)
E get(int index)
E set(int index,E element)
ListIterator接口是Iterator接口的一个子接口,它定义了一个方法用于在迭代器位置前面增加一个元素**(待补全)**
3.Set
Set接口等同于Collection接口,但其行为方法有更严格的定义:
Set集的add方法不允许增加重复元素
4.(待补全)

集合框架中的具体集合

集合框架中的类

集合框架中的类

  1. ArrayList ——一种可以动态增长或缩减的索引序列
  2. LinkedQueue——一种可以在任何位置进行高效插入或删除操作的有序序列
  3. ArrayDeque——一种用循环数组实现的双端队列
  4. HashSet——一种没有重复元素的无序集合
  5. TreeSet——一种有序集
  6. EnumSet——一种包含枚举类型值的集
  7. LinkedHashSet——一种可以记住元素插入次序的集
  8. PriorityQueue——一种允许高效删除最小元素的集合
  9. HashMap——一种存储键/值关联的数据结构
  10. TreeMap——一种键值有序排列的映射表
  11. EnumMap——一种键值属于枚举类型的映射表
  12. LinkedHashMap——一种可以记住键/值添加次序的映射表
  13. WeakHashMap——一种其值无用武之地后可以被垃圾回收器自动回收的映射表
  14. IdentityHashMap——一种用==而非equals比较键值的映射表

链表(Linked List)

1.在java中,所有链表实际上都是双向链接的——即每个结点还存放着指向前驱结点的引用
2.
3.LinkedList中的基本方法:(待补全)
4.LinkedList中的其他方法:(待补全)

数组列表(ArrayList)

散列集(HashSet)

散列表为每个对象计算一个整数,称为“散列码”(hash code)。散列码是由对象的实例域产生的一个整数,更准确的说,具有不同数据域的对象将产生不同的散列码 有关方法:hashCode(待补全)

Java中,散列表用链表数组实现,每个列表被称为“桶”(bucket)。想要查找表中对象位置,就要先计算其散列码,然后与桶的总数取余,所得到的结果就是保存这个对象的桶的索引 有关问题:“散列冲突”(待补全)

1.散列可以用于实现几个重要的数据结构
其中最简单的是Set类型(无重复元素的元素集合),Java类库提供了一个HashSet类,它实现了基于散列的集。可以用add方法添加元素。contains方法已经被重新定义,用来快速查看是否某个元素已经出现在集中。
散列集迭代器将一次访问所有的桶。由于散列将元素分散在表的各个位置上,所以访问它们的顺序几乎是随机的。只有在不关心集合中元素的顺序时才应该使用HashSet
2.HashSet中的基本方法:(待补全)
3.HashSet中的其他方法:(待补全)

树集(TreeSet)(待补全)

队列与双端队列(Queue和Deque)(待补全)

优先级队列(PriorityQueue)(待补全)

映射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值