`
pindai
  • 浏览: 4699 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

普通集合类

 
阅读更多
1:Collection接口:存放单个对象.
    -List
       - ArrayList
         ArrayList是以数组创建,填满的时候扩容是根据1.5+1,不过之前需要跟原数组大
         小 +1(minCapacity)比较,以大的为最新数组的容量。
         1:缩小容量用trimToSize();
         2:对非NULL用equals的方式寻找;
         3:非线程安全;

       - LinkedList
         LinkedList基于双向链表机制实现,一个entry有previous,next指向。查找和删除
         都须要遍历链表,非线程安全。

       - Vector
         Vector跟ArrayList基本原理一样,但在各个方法加了synchronized,所以线程安
         全.扩容方法也不同,Vector有一个参数capacityIncrement,  
         当capacityIncrement>0的时候,扩大为size+capacityIncrement。如果=<0,就扩
         大为size的两倍。

       - Stack
         Stack继承于Vector,在Vector的基础上实现后进先出(LIFO),提供
         push,pop,peek(获取最后一个元素).

     -Set
        Set和List最大的区别是Set不可以放重复的元素,HashSet,TreeSet不支持get(int).
       - HashSet
         基于HashMap实现,非线程安全。

       - TreeSet
         基于TreeMap实现,非线程安全,支持排序,可以传入Comparator



2:Map接口:key-value
      - HashMap
        HashMap是数组与链表的结合体,它有四个属性:
        key,value,hash,next.get(key)的时候首先通过key的hashcode查询,然后
        用key的equals找到在链表的具体位置。
         1:hash算法:hashcode & (lenght-1)取出在数组的位置。数组的长度都是2
            的n次方。new hashmap的时候会把数组容量对应到2的N次方;
         2:hashmap的三个因素:capacity,loadfactor,threshold;
            threshold=capacity*loadfactor(12=16*0.75);当元素超越
            threshold的时候会进行扩容resize.resize会重新计算现有元素的位置,
            所以比较耗性能,所以当知道多少元素的时候,可以初始它避免resize;如有
            1000个元素的时候,0.75*size>1000 和需要是2的N次方,所以size为
            2048,new HashMap(2048)
         3:对于key为null,会替换之前key为null的value,否则新建,next为第一个
           entry.所以get的时候对key为null的总拿第一个进行遍历。
         4:非线程安全,可以使用Collections.synchronizedMap。
   

      - TreeMap
        1:非线程安全。
        2:如果没有传入comparator,root非null,当key为null时候,抛出
           nullpointexception
分享到:
评论

相关推荐

    JAVA基础-集合类

    ### JAVA基础-集合类 #### 一、集合的概述与分类 ##### 1. 集合概述 集合是Java编程语言中一种重要的数据结构,它用于存储一系列的对象。与数组相比,集合提供了更加灵活的方式来处理数据。集合的一个显著特点是它...

    java集合类原理面试题

    Java集合类是Java编程中非常重要的组成部分,它们提供了一种组织和管理数据的方式。Java集合框架主要由两个核心接口——`Collection`和`Map`构建。`Collection`接口又派生出三个子接口:`Set`、`List`和`Queue`。而`...

    Java集合类知识点总结

    Java集合类知识点总结 Java集合类是Java语言中最基本的数据结构之一,用于存储和操作对象的集合。下面是Java集合类的相关知识点总结: 集合的定义 集合是只能存储对象的数据结构,对象类型可以不一样,长度可变。...

    Java concurrency之集合_动力节点Java学院整理

    Java并发编程中,集合框架...理解JUC中的并发集合类,需要深入理解它们如何处理并发问题,以及它们与普通集合类在设计上的差异。这有助于我们在编写多线程程序时选择合适的集合类型,以实现高效、线程安全的数据管理。

    关于C++普通函数跟类函数的内存实现

    C++ 函数的内存实现机制 ...类的非静态成员函数和普通函数一样,都是存储在代码段中的,并且具有相同的入口地址。类的成员函数可以通过指针调用,并且编译器将自动将对象的指针作为隐式参数传递给函数。

    Java集合知识测试B.doc

    本测试主要针对Java集合知识进行考核,包括对象数组、集合与数组的区别、集合操作方法、并发修改异常处理、以及ArrayList、LinkedList和Vector等具体集合类的特点。 1. 对象数组是Java中的一种数据结构,它存储的是...

    Java集合框架学习笔记

    `Class`类在Java中扮演着特殊的角色,它不仅是一个普通类,而且是用于获取和操作类信息的关键。每个类在JVM中都有一个唯一的`Class`对象,存储了类的元数据,如类名、包名、字段和方法信息。当我们使用`getClass()`...

    2018-2020年中国海洋大学416普通动物学与普通生态学考研真题

    本资料集合了2018年至2020年间的考研真题,旨在帮助考生全面理解和掌握这两个学科的核心知识。 普通动物学是生物学的一个分支,主要研究动物的形态、结构、生理、发育、分类、分布和进化等基本问题。在这个部分,...

    MFC 列表控件(ListControl)扩展类集合(10多种)

    本集合包含10多种对MFC列表控件的扩展类,旨在提升其功能性和易用性。 1. **自定义视图模式** MFC列表控件默认支持图标、报告和小图标三种视图模式。扩展类可能增加了更多的视图模式,如详细信息视图,允许用户...

    普通地质学南京大学舒良书复习整编重点.pdf

    矿物的形态包括矿物单体和矿物集合体。矿物的物理性质包括透明度、光泽、颜色、条痕等。 矿物的物理性质 矿物的物理性质包括透明度、光泽、颜色、条痕、硬度、解理、断口等。透明度是指矿物透过可见光的能力。光泽...

    实用小软件集合

    这个集合不仅为IT爱好者提供了丰富的资源,也使得普通用户能够更加便捷地管理自己的电脑和生活。无论是为了深入了解自己的硬件设备,还是为了应对日常生活中对快速生成和读取二维码的需求,亦或是寻找各种实用工具以...

    一个用集合做的DVD管理系统

    这个DVD管理系统很可能包含了一些类或数据结构,用于表示DVD对象,并提供了相应的接口来执行这些基本操作。 首先,增(Add)操作可能涉及创建一个新的DVD对象,然后将其添加到集合中。这可能通过一个方法实现,例如...

    c#集合学习笔记(.doc格式)

    在这篇学习笔记中,我们将探讨几个关键的集合类,包括System.Array、ArrayList、Hashtable以及SortedList,以及它们的特点和常用方法。 首先,System.Array是所有数组的基类,它是一个抽象类,我们无法直接创建...

    managedwinapi WINDOWS API 托管包装类集合

    "managedwinapi"项目则提供了一种解决方案,它是一个集合了大量Windows API的托管包装类,极大地简化了开发者的工作。 1. Windows API与P/Invoke Windows API是由微软提供的,用于与Windows操作系统进行交互的一...

    Java集合总结

    所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。集合里存存放的元素都是引用数据类型。 数组与集合的区别:(1)数组长度不可变且无法保存具有映射关系的数据;集合类用来保存数量...

    数据结构和Java集合框架 英文版 第三版

    - **并发安全**:针对多线程环境下的安全问题,提供了`ConcurrentHashMap`等并发安全的集合类。 4. **实用技巧**: - **集合工具类**:如`Collections`工具类提供了排序、查找等常用操作。 - **泛型使用**:通过...

    JAVA面试题目集合

    - **Collections**:这是一个工具类,提供了大量静态方法来操作或返回集合类的对象。这些方法包括排序、查找、填充集合等。 #### 七、assert 的使用场景 - **用途**:从JDK 1.4开始引入,主要用于调试阶段测试布尔...

    c++ 类与对象课件,包括对象的初始化,对象的使用,构造函数和析构函数等等

    成员函数可以是普通函数,也可以是构造函数和析构函数。构造函数是用于初始化新创建的对象的特殊函数,其名称与类名相同且无返回类型。析构函数则是对象生命周期结束时自动调用的函数,用于清理对象可能占用的资源。...

Global site tag (gtag.js) - Google Analytics