zoukankan      html  css  js  c++  java
  • Java基础

    一、Collection接口

    1、List接口 ,Set接口

    2、ArrayLIst,LinkedList,Vector,Stack

    3、HashSet,LinkedHashSet,TreeSet

    二、Map接口

    1、HashMap,LinkedHashMap,TreeMap;

    三、Iterator 与 ListIterator

    1、ListIterator有add()方法,可以向List中添加对象,而Iterator不能

    2、ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

    3、ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

    4、都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

    集合特性:

    1、是否允许空

    2、是否允许重复数据

    3、是否有序,有序的意思是读取数据的顺序和存放数据的顺序是否一致

    4、是否线程安全

    底层实现

    ArrayList:动态数组(动态扩容),初始容量:10

    LinkedList:循环双向链表

    HashMap:初始容量:16

    数组+链表(JDK1.8前)

    HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,也会根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。

    数组+链表+红黑树实现(JDK1.8中)

    LinkedHashMap:

    LinkedHashMap和HashMap的区别在于它们的基本数据结构上,看一下LinkedHashMap的 Entry 继承了 HashMap中的 Entry,并添加了 before,after 前置节点后后置节点 来实现链表;

    并发集合

    ConcurrentHashMap:锁分段技术

    总结:

    1、List中的数据可重复,Set中的数据不可重复;

    2、Array,Linked,Tree,Stored前缀的都有序,否则无序;

    3、带Hash的,都是通过hashcode值定位存储的;

    4、带Linked的,都是通过链表维持顺序的;

    5、Vector,HashTable 是线程同步的,其他是 非同步的;

    参考资料:

    java集合框架综述

    Java集合

    Java集合之ArrayList

    Java集合之LinkedList

    Java集合之HashMap

    Java集合之LinkedHashMap

    ConcurrentHashMap原理分析

  • 相关阅读:
    【Redis】事务
    【Web】Apache HttpClient & HttpAsyncClient
    【Spring】导入配置文件
    【SpringBoot】@Conditional注解家族
    【前端开发】dva+antd+react
    【Spring】EnableXXX
    POJ-2240-Arbitrage
    POJ-2387-Til the Cows Come Home
    hdu-1847-畅桶工程续
    Floyd算法模板(多源最短)
  • 原文地址:https://www.cnblogs.com/wangwangfei/p/13217249.html
Copyright © 2011-2022 走看看