java 集合简述

java类库中的集合接口和迭代器接口

集合有两个基本的接口:Collection和Map
java类库中,集合类的基本接口是Collection接口,迭代器接口是Iterator。
Collection主要包括两个方法:
public interface Collection
{
  boolean add(E element);
  Iterator iterator();
}

迭代器主要包括三个方法:
public interface Iterator
{
  E next();
  boolean hasNext();
  void remove();
}

notes:java迭代器是位于两个元素之间。当调用next时候,迭代器就越过下一个元素,并返回刚刚越过的那个有元素的引用。
删除元素:
  remove方法是删除上次调用next方法返回的元素。所以想要删除某个元素,首先应该越过这个元素。删除第一个元素的过程如下:
  Iterator it = c.iterator();
  it.next();//skip over the first element
  it.remove();//now remove it

java 类库中的具体的集合

集合类型描述
ArrayList一种可以动态增长和缩减的索引序列
LinkedList一种可以在任何位置高效的删除和插入操作的有序序列
HashSet一种没有重复元素的无序集合
TreeSet一种有序集
ArrayDeque一种用循环数组实现的双端队列
PriorityQueue一种允许高效删除最小元素的集合
HashMap一种存储键/值关联的数据结构
TreeMap一种键值有序排列的映射表

链表LinkedList

  java程序语言中所有的链表都是双向连接的(doubly linked)。
  LinkedList.add 方法是将对象添加到链表尾部。如果要插入到其他位置就需要迭代器。也就是依赖于位置的add方法由迭代器负责。只有对自然有序的集合使用迭代器添加元素才有实际意义。例如集(Set)类型,其中的元素无序。在它的iterator接口中就没有add方法。但是,集合类库提供了子接口ListIterator,其中包含了add方法。

数组列表ArrayList

散列集HashSet

  散列表是一种可以快速的查找所需要的对象的数据结构。在java中,散列表用链表数组实现(解决冲突的就是方法是链地址法)。每一个列表称为桶(bucket)。散列函数采用的而是除留余数法。填装因子(load factor)表示最大填装个数占容量的比例,决定了何时再散列。

树集TreeSet

  数集是一个有序集合,任意顺序插入,但遍历时候自动有序排列。添加元素到树中比添加到散列表中慢,比添加到数组或链表中快。如果树种包含n个元素,查找元素的正确位置平均需要 logn次比较。

对象比较

  对于TreeSet(以它为例)集合,要让TreeSet知道怎样对元素排序,也就是如何比较任意两个类型的大小。即自定义排序。有两种方法:
  1.通过让要插入集合的中的类,实现Comparable接口。
  2.在TreeSet构造器中提供Comparator对象。
  例如,String 类继承了comparable接口,实现了comparaTo方法(依据字典序决定字符串大小)。

队列Queue

双端队列Deque

优先级队列(priority queue)

  一种允许高效删除最小元素的集合。就是任意顺序插入,却总是按照排序的顺序索引。它并没有对元素排序,而是使用一个优雅又高效的数据结构——堆(heap)。

映射表(Map)

知道键的信息,需要查找对应的元素。map就是为此设计的。映射表有两个通用的实现:HashMap和TreeMap
  散列映射表对键进行散列
  树映射表用键对元素排序
键必须是唯一的,如果对同一个键两次调用put方法,第二个值就会取代第一个值,并放回这个键的上一个值。
映射表的三个视图:键集、值集合和键/值对集。

     Set<K> keySet()
    Collection<V> values()
    Set<Map.entry<K,V>> entrySet()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值