zoukankan      html  css  js  c++  java
  • Java集合类List解读(云时代架构文章读后感01)

    在Java学习中我们会频繁用到Java集合类,相较于数组(Array)来说,集合类的长度可变,比数组来说要灵活,更适合我们的开发学习。Java集合就像个容器可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。使用集合类一般都需要引用java.util包。

    通过阅读文章我发现了我一直在用的Java集合由两大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复;List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。Map同属于java.util包中,是集合的一部分,但与Collection是相互独立的,没有任何关系。Map中都是以key-value的形式存在,其中key必须唯一,主要有HashMap、HashTable、TreeMap三个实现类。

    List集合是有序的,可以精确的设置元素插入位置,便捷的遍历访问元素。List中我们经常使用的就是ArrayList和LinkedList这两个类。ArrayList的底层通过数组实现,随着元素的加入动态扩容,LinkedList则是通过连表实现的,元素添加是插在链表尾部的。

    List常用功能:

    A:添加功能
    boolean add(E e):向集合中添加一个元素
    void add(int index, E element):在指定位置添加元素
    boolean addAll(Collection<? extends E> c):向集合中添加一个集合的元素。
    
    B:删除功能
    void clear():删除集合中的所有元素
    E remove(int index):根据指定索引删除元素,并把删除的元素返回
    boolean remove(Object o):从集合中删除指定的元素
    boolean removeAll(Collection<?> c):从集合中删除一个指定的集合元素。
    
    C:修改功能
    E set(int index, E element):把指定索引位置的元素修改为指定的值,返回修改前的值。
    
    D:获取功能
    E get(int index):获取指定位置的元素
    Iterator iterator():就是用来获取集合中每一个元素。
    
    E:判断功能
    boolean isEmpty():判断集合是否为空。
    boolean contains(Object o):判断集合中是否存在指定的元素。
    boolean containsAll(Collection<?> c):判断集合中是否存在指定的一个集合中的元素。
    
    F:长度功能
    int size():获取集合中的元素个数
    
    G:把集合转换成数组
    Object[] toArray():把集合变成数组。

    ArrayList是Java集合框架中使用最多的一个类,是我们平常最多使用的,是一个数组队列,线程不安全集合。

    继承于AbstractList,实现了List, RandomAccess, Cloneable, Serializable接口。

    (1)ArrayList实现List,就是得到了List的功能。
    (2)ArrayList实现RandomAccess,获得了快速随机访问存储元素的功能,RandomAccess是一个标记接口,没有任何方法;
    (3)ArrayList实现Cloneable,得到了clone()方法,可以实现克隆功能;
    (4)ArrayList实现Serializable,它就可以被序列化传输,典型的应用就是hessian协议。

    常用操作:

    //创建ArrayList集合:
            List<类型> list = new ArrayList<类型>();
    //添加功能:
            list.add(要添加的变量);   
            list.add(位置,要添加的变量);     
    //修改功能:
            list.set(位置,修改的变量);
    //获取功能:
            list.get(位置);
     //判断功能:
            boolean isEmpty = list.isEmpty();//是否为空
            boolean isContain = list.contains(判断存在的变量);
    //长度
            list.size()
    //把集合转换成数组:
            String[] strArray = list.toArray(new String[]{});
    //删除功能:
            list.remove(位置);
            list.remove(要删除变量);
            list.clear();//将list释放,元素清空,且无返回值
    //for循环迭代集合:
            for(String str:list){
                System.out.println(str);
            }
    //迭代器遍历集合:(ArrayList实际的跌倒器是Itr对象)
    Iterator it=list.iterator();
    it.hasNext()

    LinkedList我平常很少使用在这里看到了就写一下。LinkedList是一个双向链表,每一个节点都拥有指向前后节点的引用。相比于ArrayList来说,LinkedList的随机访问效率更低。

    它继承AbstractSequentialList,实现了List, Deque, Cloneable, Serializable接口。
    (1)LinkedList实现List,可以用List的方法。
    (2)LinkedList实现Deque,Deque 是一个双向队列,也就是既可以先入先出,又可以先入后出,说简单些就是既可以在头部添加元素,也可以在尾部添加元素;
    (3)LinkedList实现Cloneable,得到了clone()方法,可以实现克隆功能;
    (4)LinkedList实现Serializable,表示可以被序列化传输,典型的应用就是hessian协议。

     常见操作://创建集合       List<类型> list = new linkedList <类型>();

    //添加功能:
            list.add(要添加的变量);   
         list.addLast(要添加的变量)
    lis.addFirst(要添加的变量)
    //修改功能: list.set(位置,修改的变量); //获取功能: list.get(位置);
         E getFirst() 获取链表的开头 
         E getLast() 获取链表的结尾//判断功能: boolean isEmpty = list.isEmpty();//是否为空 boolean isContains = list.contains(判断存在的变量);
    //长度
            list.size()
    //把集合转换成数组:
            String[] strArray = list.toArray(new String[]{});
    //删除功能:
            list.remove(位置);
            list.remove(要删除变量);
         E removeFirst() 移除并返回链表的开头
         E removeLast() 移除并返回链表的结尾
         list.clear();
    //将list释放,元素清空,且无返回值 //for循环迭代集合: for(String str:list){ System.out.println(str); } //迭代器遍历集合:(linkedList实际的跌倒器是Itr对象) Iterator it=list.iterator(); it.hasNext()

    两者比较:

    (1)操作不同

    (2)插入中间元素LinkedList要比ArrayList要快,因为LinkedList用的是链表,而ArrayList用的数组则需要一个个往后移元素。

    总结:如果只是存放数据,并进行简单的迭代情况下,我们一般采用ArrayList的效率最高,

    如果涉及到频繁的修改元素,就应该采用LinkedList

  • 相关阅读:
    C# sqlhelp
    vs2015 C#打包程序为exe
    python3.6安装docx模块
    python 第八天
    python 第七天
    python 选课系统
    python 第六天
    python 模拟实现一个ATM + 购物商城程序
    python 计算器
    python 第五天
  • 原文地址:https://www.cnblogs.com/chch157/p/10953702.html
Copyright © 2011-2022 走看看