JAVA集合学习笔记

(1)Java集合采用实现和接口分离的方法。例如比较熟悉的数据结构  队列。一个队列接口的最小形式可能类似下面这样:

   interface Queue<E>

  {

        void add(E element);

        E remove();

        int size();

        //...............

  }

  但是实际上队列的实现方式有多种,可以是通过链表的形式,可以通过数组的形式。具体的实现类实现 Queue接口。

(2)在Java类库中,集合类的基本接口是Collection接口

    public interface Collection<E>

   {

          boolean add(E element); //集合中添加新元素

          Iterator<E> iterator();  //返回一个实现了Iterator接口的对象,用来依次访问集合中的元素

         //.Collection接口还提供了一些实用的方法,详见Java API

   }

   Iterator接口中包含3个方法:

   public interface Iterator<E>

 {

          E next();  //返回迭代器指向集合中元素的值。

          boolean hasNext();  //判断迭代器是否访问完集合

         void remove();  //删除上次调用next方法时返回的元素。next()和remove()是具有依赖性的,在remove之前没有调用next是不合法的

 }

 (3)Java库中的具体集合

        

ArrayList一种可以动态增长和缩减的索引序列
LinkedList一种可以再任何位置进行高效地插入和删除操作的有序序列
ArrayDeque一种用循环数组实现的双端队列
HashSet一种没有重复元素的无序集合
TreeSet一种有序集
EnumSet一种包含枚举类型值的集
LinkedHashSet一种可以记住元素插入次序的集
PriorityQueue一种允许高效删除最小元素的集合
HashMap一种存储键/值关联的数据结构
TreeMap一种键值有序排列的映射表
EnumMap一种键值属于枚举类型的映射表
LinkedHashMap一种可以记住键/值项添加次序的映射表
WeakHashMap一种其值无用武之地后可以被垃圾回收器回收的映射表
IdentityHashMap一种用==,而不是用equals比较键值的映射表

(4)链表和数组列表

     Java中LinkedList是以双向链表的方式实现的List,对于经常进行插入和删除操作的列表集合非常适用。而ArrayList封装了一个动态再分配的对象数组,可以随机的访问每个元素,对于经常随机访问元素的集合非常适用

(5)散列集(HashSet)

     散列表可以快速的查找所需要的对象。散列表为每个对象计算一个整数,成为散列码。散列码是由对象的实例域产生的一个整数。更准确的说,具有不同数据域的对象将产生不同的散列码。在Java中,散列表用链表数组实现。每个列表被成为桶,要想查找表中的对象的位置,就要先计算它的散列码,然后与桶的总数取余,所得到的结果就是保存这个元素的桶的索引。

    散列表可以用来实现几个重要的数据结构,其中最简单的是set类型。set是没有重复元素的元素集合。set的add方法首先在散列集中查找要添加的对象,如果不存在,则将元素添加进去。Java集合中提供了HashSet类,它实现了基于散列表的集,当使用add()方法添加元素时,只需要在某个桶中查找元素,而不是遍历全部的元素,从而提高了查找的效率。

(6)树集(TreeSet)
    TreeSet比HashSet有所改进,TreeSet是一个有序集合。 排序使用树结构完成的(现在是使用红黑树)。将一个元素添加到树中要比添加到散列表中慢,但是,与将元素添加到数组或链表的正确位置上相比还是快很多的。如果树中包含n个元素,查找新元素的正确位置平均需要log2  n次比较。另外,可以通过定义一个实现Comparator接口的类来定义排序的规则。

(8)双端队列

        Java中Deque接口表示的是双端队列,通过ArrayDeque和LinkedList实现。

(7)优先级队列(PriorityQueue)

      优先级队列中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索。无论何时调用remove方法,总户获得当前优先级队列中最小的元素。优先级队列使用了堆数据结构。

(8)映射表(Map)

     映射表用来存放键/值对,如果提供了键,就能查找到值。Java类库为映射表提供了两种通用实现:HashMap和TreeMap,两个都实现了Map接口。

    HashMap是对键进行散列,TreeSet是用键的整体顺序对元素进行排序,并将其组织成搜索树。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值