zoukankan      html  css  js  c++  java
  • 集合总结

    *集合总结*

    集合的概念

      对象的容器,和数组类似,定义了对多个对象进行操作的常用方法。

    List集合:

      有序、有下标、元素可以重复。(ArrayList、LinkedList、Vector)

    ​   ArrayList:有序、有下标、元素可以重复

    ​ ArrayList的底层数据结构就是一个数组,数组元素的类型为Object类型,对ArrayList的所有操作底层都是基于数组的。

    ​ 添加基本数据类型的时候会自动装箱;要想新new出来的对象是否和集合中现有的对象重复,要重 写实体类中的Object的toString方法。

    ​   LinkedList:存储结构:双向链表,链表结构实现,增删改快,查询慢。常用的方法基本上和ArrayList的是相同的。

    ​   Vector:存储结构是数组,该集合允许添加重复的元素。Vector比ArrayList先存在,Vector是同步的,Vector的对象是线程安全的;ArrayList是异步的,ArrayList的对象不是线程安全的。同步影响执行效率,所以ArrayList比Vector性能好,而在实际项目开发中,我们一般情况下也是使用ArrayList的时候比较多。

    Set集合

      无序、无下标、元素不可重复。(HashSet、TreeSet、(LinkedHashSet是有序的))

    ​   HashSet:存储结构:哈希表(数组+链表+红黑树),HashSet是基于HashMap实现的。
    存储过程:(这也是判断元素重复的依据)(1)根据hashcode计算保存的位置,如果此位置为空,则直接保存,如果不为空执行第二步。
    ​ (2)再执行equals方法,如果equals方法为true,则认为是重复,否则,形成链表。
    注意:hashcode方法和equals方法必须都同时重写才行,重写其中一个都是不能实现是否为同一个对象的判断逻辑。
    最后是既有数组又有链表。

    ​   TreeSet:存储结构:红黑树 左边的节点都要比右边的节点要小
    compareTo方法的返回值为0,则认为是重复元素则不能添加进来了,在添加元素的时候要实现comparable
    接口才行,否则会报类型转换异常。当添加基本数据类型的时候,不用实现Comparable接口或者自定义Comparator.

    ​   LinkedHashSet:视频上没有讲解,百度上说LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。

    Map集合

      存储一堆数据,无序、无下标,键不可以重复,值是可以重复的。(HashMap、HashTable、TreeMap)

    ​   HashMap:存储结构:哈希表(数组+链表+红黑树)
    怎样去重复:使用key的hashcode和equals方法作为判断重复的依据的

    ​   HashTable:实现原理和HashMap相同,功能相同,底层都是哈希表结构,查询速度快,在很多情况下可以互用.HashTable是线程安全的,HashMap是线程不安全的,而且在实际的项目开发中,HashTable基本上不怎么使用。从JDK的发展历史来看,HashTable出现的时间要比HashMap早。

    Collections

      集合工具类,定义了除了存取以外的集合常用方法。

  • 相关阅读:
    BZOJ4004: [JLOI2015]装备购买
    POJ3696:The Luckiest number
    BZOJ1053: [HAOI2007]反素数ant
    BZOJ1029: [JSOI2007]建筑抢修
    牛站(贪心+暴力做法)
    浅谈SPFA(没有特别的探讨,只是对某天晚上的思考做个记录)
    火车进栈问题(如何快速计算单个组合数)
    雷达设备
    畜栏预定
    防晒
  • 原文地址:https://www.cnblogs.com/dongyaotou/p/14349954.html
Copyright © 2011-2022 走看看