java集合Collection实现类解析ArrayList LinkedList及Vector

目录
  • 前言
  • java集合Collection
    • List实现类
    • Set实现类
    • 代码实例

前言

平时开发经常会用到List等集合操作,在这里做一个小结

java集合Collection

java里面集合分为两大类:List和Set,下面是类图信息

List实现类

List的实现类ArrayList,LinkedList,Vector的特性

/**
     * 有序集合List接口的实现类LinkedLIst,ArrayList,Vector,Stack
     *(1)ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问,
     * 当数组大小不满足时会增加存储能力,将已有数组数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时,
     * 需要对数组进行拷贝,移动,代价比较高。因此,它适合随即查找和遍历,不适合频繁插入和删除财操作。
     *(2)Vector与ArrayList一样,也是通过数组实现的。不同的是它支持线程的同步,即一时刻只有一个线程能够写Vector,
     * 避免多线程同时写引起的不一致性。但实现同步需要很高的花费, 因此,访问它比访问ArrayList慢。
     * 2.1 Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.
     * 2.2 Vector和ArrayList都是用数组实现的,所以,在添加和插入时,最好从表尾操作,而不要从中间或者表头开始,以避免数组移动引起的开销!
     *(3)LinkedList是用链表结构存储数据的,很适合数据的动态插入和删除,随即访问和遍历速度比较慢。另外,由于它实现了接口Deque,
     * 它还提供了List没有定义的方法,专门用于操作表头和表尾元素。
     *(4)可以为每个List生成ListIterator,支持双向遍历List,而且能够在ListIterator位置插入和删除元素。
     *(5)Stack堆栈类继承Vector,它总是对列表的尾部数据进行操作,采用了先进后出的策略,自定义了push(),peek(),pop(),empty(),search()几个方法。
     */

Set实现类

Set的实现类HashSet,LinkedHashSet,TreeSet的特性

/**
     * 无序集合Set的实现类HashSet,LinkedHashSet,TreeSet
     *(1)Set不允许存放相同的元素,判断的依据是根据存放元素的equals方法和hashCode来判断的,如有需要可以重写这两个方法
     *(2) HashSet:基于HashMap实现,哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放
     *(3)LinkedHashSet:基于LinkedHashMap实现,以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代。
     LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet
     *(4)TreeSet:基于TreeMap实现,Set里唯一现实了SortedSet接口的实现类,默认按元素的实现接口Comparable的方法CompareTo(Object obj)升序,
     如有需要,元素可实现Comparable
     */

代码实例

/**
 * @author kl by 2016/4/5
 * @boke www.kailing.pub
 */
public class CollectionTest {
    public void initCollection(Collection collection){
        collection.add(1);
        collection.add(2);
        collection.add(3);
        collection.add(4);
        collection.add(5);
        collection.add(6);
    }
    @Test
    public void linkListTest(){
        LinkedList list = new LinkedList();
        //初始化数据
        initCollection(list);
        //迭代方式一
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i).toString());
        }
        System.out.println("-------------------------迭代方式一华丽分割线----------------------------");
        //迭代方式二
        for (Object o : list) {
            System.out.println(o.toString());
            //list.add(3);//这样写直接抛异常,有这种业务需要的直接用ListIterator迭代
        }
        System.out.println("-------------------------迭代方式二华丽分割线----------------------------");
        //迭代方式三 封装了Iterator
        ListIterator listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            /**
             * 在迭代的同时可以操作当前的listIterator,对集合做增删改的操作,其他的迭代方式在迭代的时候不能直接操作集合
             * ListIterator没有直接更新的方法,通过删除和添加来达到更新的目的
             */
            Object value=listIterator.next().toString();//
            if (value.equals("3")){
                listIterator.remove();//删除某个元素
                listIterator.add(0);//添加某个元素
            }else{
                System.out.println(value);
            }
        }
        System.out.println("-------------------------迭代方式三华丽分割线----------------------------");
        //迭代方式四 ps:java.util.Iterator
        Iterator iterable = list.iterator();
        while (iterable.hasNext()) {
            System.out.println(iterable.next());
        }
        System.out.println("-------------------------迭代方式四华丽分割线----------------------------");
        System.out.println("是否存在 " + list.contains(9)); //使用indexOf函数现实
        System.out.println("在集合的哪个位置 " + list.indexOf(3)); //不存在返回-1
        System.out.println("在集合的哪个位置 " + list.lastIndexOf(3));//从集合的最后索引往前找
        list.remove(0);//移除指定下标元素
        Object str[] =list.toArray();//转换成数组,感觉一般不会有这个操作
        List list1=list.subList(2,6);//分割一个集合
        for (Object o : list1) {
            System.out.println("list1 "+o.toString());
            //list.add(3);//这样写直接抛异常,有这种业务需要的直接用ListIterator迭代
        }
        list.removeFirst();
        list1= (List) list.clone();//复制一份list,和直接list1=list的不同之处在于对list操作不影响list1
        /*以上操作迭代LinkedList,ArrayList,Vector都可用*/
        /*以下操作方式是LinkedList特有的,是实现Deque中的方法*/
        list.addFirst(10);
        list.addLast(10);
        System.out.println("链表头数据 "+list.getFirst().toString());
        System.out.println("链表尾数据 "+list.getLast().toString());
        list.removeFirst();//移除第一个元素
        list.offer(11);//方法内部使用了add方法
        list.removeLast();//移除最后一个元素
    }
    @Test
    public void StackTest(){
        Stack list=new Stack();
        initCollection(list);
        System.out.println("pop :"+list.pop());// pop() 移除栈顶的值,并返回移除的Obj
        System.out.println("push :"+list.push(5));// push() 压栈,并返回Obj
        System.out.println("peek :"+list.peek());// 取栈顶的值
        System.out.println("empty :"+list.empty());// 判空方法,是否为空栈
        System.out.println("search :"+list.search(99));//查找元素的位置,不存在返回-1,可以用来判断是否存在某个值
        Enumeration en= list.elements(); //Vector特有的迭代方式
        while (en.hasMoreElements()){
            if(list.empty()){
            }else
                System.out.println(en.nextElement());
        }
    }
    @Test
    public void arrayListTest(){
        ArrayList list=new ArrayList();
        initCollection(list);
        for(Object o:list){
            System.out.println(o.toString());
        }
    }
    @Test
    public void VectorTest(){
        Vector v=new Vector();
        Enumeration en= v.elements(); //Vector特有的迭代方式
        while (en.hasMoreElements()){
            System.out.println(en.nextElement());
        }
    }
    @Test
    public void SetTest(){
        HashSet hs = new HashSet();
        initSet(hs);
        System.out.println("HashSet 顺序:"+hs);
        LinkedHashSet lhs = new LinkedHashSet();
        initSet(lhs);
        System.out.println("LinkedHashSet 顺序:"+lhs);
        TreeSet ts = new TreeSet();
        initSet(ts);
        System.out.println("TreeSet 顺序:"+ts);
        for(Object s:hs){
            System.out.println("value:"+s);
        }
    }
    public void initSet(Set set){
        set.add("G");
        set.add("B");
        set.add("A");
        set.add("E");
        set.add("D");
        set.add("C");
        set.add("F");
    }

以上就是java集合Collection实现类解析ArrayList LinkedList及Vector的详细内容,更多关于Collection实现类ArrayList LinkedList Vector的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java集合框架Collections原理及用法实例

    Collections工具类 Java里关于聚合的工具类,包含有各种有关集合操作的静态多态方法,不能实例化(把构造函数私有化) public class Collections { // Suppresses default constructor, ensuring non-instantiability. private Collections() { } } 和Collection的区别 Collection是接口,提供了对集合对象进行基本操作的通用接口方法,List.Set等多种具体的实

  • java 集合之实现类ArrayList和LinkedList的方法

    List 的方法列表 方法名 功能说明 ArrayList() 构造方法,用于创建一个空的数组列表 add(E e) 将指定的元素添加到此列表的尾部 get(int index) 返回此列表中指定位置上的元素 size() 返回此列表中的元素数 clear() 移除此列表中的所有元素 isEmpty() 如果此列表中没有元素,则返回true remove(int index) 移除此列表中指定位置上的元素 indextof(Object o) 返回此列表中首次出现的指定元素的索引,或如果此列表不

  • 详解JAVA中的Collection接口和其主要实现的类

    Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的"子接口"如List和Set,详细信息可见官方文档http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/

  • Java中的collection集合类型总结

    Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.* Java集合主要可以划分为4个部分:List列表.Set集合.Map映射.工具类(Iterator迭代器.Enumeration枚举类.Arrays和Collections). Java集合工具包框架如下图. 说明:看上面的框架图,先抓住它的主干,即Collection和Map. Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作

  • java集合Collection实现类解析ArrayList LinkedList及Vector

    目录 前言 java集合Collection List实现类 Set实现类 代码实例 前言 平时开发经常会用到List等集合操作,在这里做一个小结 java集合Collection java里面集合分为两大类:List和Set,下面是类图信息 List实现类 List的实现类ArrayList,LinkedList,Vector的特性 /** * 有序集合List接口的实现类LinkedLIst,ArrayList,Vector,Stack *(1)ArrayList是最常用的List实现类,内

  • java集合Collection实现类解析ArrayList LinkedList及Vector

    目录 前言 java集合Collection List实现类 Set实现类 代码实例 前言 平时开发经常会用到List等集合操作,在这里做一个小结 java集合Collection java里面集合分为两大类:List和Set,下面是类图信息 List实现类 List的实现类ArrayList,LinkedList,Vector的特性 有序集合List接口的实现类LinkedLIst,ArrayList,Vector,Stack (1)ArrayList是最常用的List实现类,内部是通过数组实

  • java集合collection接口与子接口及实现类

    目录 概要 1 Collection接口的实现子类特性 2 通过实现子类ArrayList体现Collection接口方法 2.1 代码演示示例 3 集合的遍历:①使用Iterator(迭代器)②增强for循环遍历 3.1 代码示例 4 List相关解读 5 Set接口分析 Map接口及实现子类 结语 概要 集合概念:像数组一样是java的一个容器:和数组不同的是数组只能存同类型的数据,且长度定义之后就不可变,集合不仅,可以存多种类型的数据,而且还提供了增.删.改.查的方法: 集合分类:可以分为

  • Java 集合中的类关于线程安全

    Java集合中那些类是线程安全的 线程安全类 在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的.在jdk1.2之后,就出现许许多多非线程安全的类. 下面是这些线程安全的同步的类: vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用.在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的. statck:堆栈类,先进后出 hashtable:就比hashmap多了个线程安全 enumeration:枚举,相当于迭代器

  • Java 集合系列(二)ArrayList详解

    ArrayList ArrayList 是通过一个数组来实现的,因此它是在连续的存储位置存放对象的引用,只不过它比 Array 更智能,能够根据集合长度进行自动扩容. 假设让我们来实现一个简单的能够自动扩容的数组,我们最容易想到的点就是: add()的时候需要判断当前数组size+1是否等于此时定义的数组大小: 若小于直接添加即可:否则,需要先扩容再进行添加. 实际上,ArrayList的内部实现原理也是这样子,我们可以来研究分析一下ArrayList的源码 add(E e) 源码分析 /**

  • JAVA集合框架工具类自定义Collections集合方法

    项目中有需要多次统计 某些集合中 的某个属性值,所以考虑封装一个方法,让其其定义实现计算方式. 话不多说,看代码: 1.封装的自定义集合工具类:CollectionsCustom package com.test.util; import java.util.Collection; import org.apache.commons.collections.CollectionUtils; /** * 自定义集合处理类 */ public class CollectionsCustom { /*

  • java高并发ThreadPoolExecutor类解析线程池执行流程

    目录 摘要 核心逻辑概述 execute(Runnable)方法 addWorker(Runnable, boolean)方法 addWorkerFailed(Worker)方法 拒绝策略 摘要 ThreadPoolExecutor是Java线程池中最核心的类之一,它能够保证线程池按照正常的业务逻辑执行任务,并通过原子方式更新线程池每个阶段的状态. 今天,我们通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程,小伙伴们最好是打开IDEA,按照冰河说的步骤,调试下Th

  • 浅析Java集合及LIst接口

    一.集合的概念 1.概述: 在学习集合前,先回忆一下数组的一个特征---数组有固定的长度,定义一个数组:int[] array = new int[];而针对数据长度可变的情况,产生了集合,java集合就是为了应对动态增长数据,在编译时无法知道具体的数据量而产生的. 集合类又叫容器类. 2.集合和数组的区别 都是容器,数组时固定的长度,集合时可变的: 数组存放的数据都是基本数据类型(四类八种)集合存放的数据都是引用数据类型(String.Integer.自定义数据类型) 集合中对于基本数据类型会

  • 一篇文章带你入门java集合

    目录 一.简介 1.java集合框架图 2.集合框架体系 3.Set和List的区别 二.ArrayList 1.定义 2.用实例了解ArrayList 三.LinkedList 1.语法 2.示例 四.HashSet 1.定义 2.语法 3.示例 五.HashMap 1.定义 2.语法 3.示例 Java HashMap 方法 六.Iterator(迭代器) 1.定义 2.示例 七.List和数组互转 总结 一.简介 1.java集合框架图 从上面的集合框架图可以看到,Java 集合框架主要包

随机推荐