集合(2)

作者: 奔跑的蛙牛 | 来源:发表于2018-07-24 23:18 被阅读0次

2. 具体的集合

集合框架中的类

从上图中可以看出,除了Map结尾的类都实现了collection接口

从下图中可以看出java库具体的集合

java集合

2.1 链表

我们知道数组和ArrayList有一个重大缺陷。这个缺陷就从数组的中间位置删除一个元素需要付出重大的代价,因为从数组中间删除一个元素,元素中间的位置都需要向前移动

所以我们可以利用一个大家非常熟悉的数据结构——链表来解决这个问题

数组在连续的位置上存放着对象的引用,但链表将每个对象存放在独立的节点中。每个结点存放着下个结点的引用

集合类库中提供了子接口ListIterator,其中包含add方法:

interface ListIterator <E> extends Interator<E> {

    void add(E element);

    E pervious();

    boolean hasPervious();

}

与Collection.add不同,这个方法不返回boolean类型的值。

与next方法一样,previous总是返回被越过的值

不能利用一个interator对象删除一个数组的同时,利用第二个interator再读取这个链表

链表的set方法不会对造成结构性损害

collection 接口中声明了许多用于对链表进行操作的方法,其中大部分都是在LinkList的超类中AbstractCollection中实现的,可以利用contains来检测链表是否含有某一个元素

下面我们简单的写个LinkedList  (如果您知道输出请在评论区发表,就当一次测验)

import java.util.Iterator;

import java.util.LinkedList;

import java.util.List;

import java.util.ListIterator;

public class LinkedlistTest {

    public static void main(String[] args){

        List a = new LinkedList<>();

        a.add("Amy"); a.add("Carl");

        a.add("Eciri"); List b= new LinkedList<>();

        b.add("x"); b.add("xx"); b.add("xxx");

        b.add("xxxx");

        // merge b into a ListIterator

        aIter = a.listIterator();

        Iterator bIter = b.iterator();

        while (bIter.hasNext()){

            if (aIter.hasNext()){

                String d = aIter.next();

                System.out.println(d);

            }

            aIter.add(bIter.next()); }

            // remove every second word from b

            bIter = b.iterator();

            while (bIter.hasNext()){

                bIter.next();

                if (bIter.hasNext()){

                    bIter.next();

                    bIter.remove();

                }

             }

             System.out.println(a);

             System.out.println(b);

              a.removeAll(b) ;

             System.out.println(a) ;

    }

}

介绍一下List接口常用的方法

ListIterator<E> lisIterator()     //访问列表迭代器,以便访问列表中的元素

ListIterator<E> listIterator(int index)     // 访问列表迭代器,从索引位置开始访问。

void add(int i, E element)      //在给定位置添加一个元素。

void addAll(int i, Col1ection elements) //将某个集合中的所有元素添加到给定位置。

2.2 数组列表

常见的就是ArrayList也实现了List接口,这个接口封装了一个动态可分的数组

2.3 散列表

在不在乎顺序的情况下,可以高效的读取数据

如果自定类需要实现自己的散列码,就是实现自己的hashCode。equals相等hashCode必定相等

散列表

左边每个列表称之为桶,要想查出表中对象的位置,就要先计算他的散列码,然后与桶的总数取余,所得到的就是这个元素在这个桶的索引。


相关文章

  • swift第三周学习总结

    1. 集合(Set) (1)集合的定义: (2)集合写法: 举例: (4)对集合的操作: 2. 字典(Dictio...

  • 集合2

    LinkedList集合:是List的子类,能继承List所有的方法,并具有自己的方法LInkedList lin...

  • 集合(2)

    2. 具体的集合 从上图中可以看出,除了Map结尾的类都实现了collection接口 从下图中可以看出java库...

  • 集合(2)

  • 集合2

    Java集合框架成员:Collection系列,Map系列,Iterator系列。Collection、Map:盛...

  • 2 集合

    集合类的关键点? 是否允许空值 2. 是否有序 3. 是否允许重复 4. 是否线程安全 ArrayList A...

  • redis有序集合排序

    一、集合1.设置集合 2.获取集合成员数 3.获取集合成员 二、有序集合1.设置集合中的索引及成员 2.返回集合中...

  • 【Javascript】对等差分

    给出两个集合(如集合A = {1, 2, 3}和集合B = {2, 3, 4})),而数学术语“对等差分”的集合就...

  • java 集合 2 - LinkedList

    java 集合 2 - LinkedList 参考文章:图解集合2:LinkedList LinkedList是基...

  • Java集合

    集合 2:到底使用哪种集合看需求。

网友评论

    本文标题:集合(2)

    本文链接:https://www.haomeiwen.com/subject/nncrmftx.html