容器有俩大接口Collection接口(无序,不唯一)和Map接口

Collection接口有俩个子接口分别是List和Set。

List接口特点是有序但是不唯一,她有三个子接口分别是:ArrayList,Vector以及LinkList

ArrayList我们在前面文章中有详细介绍。在这里我们补充几点。ArrayList底层是数组。由于她是继承List接口。所以她也是有序但是不唯一。

Vector的的底层也是数组,他和ArrayList的方法类似。

在这里我们强调一下ArrayList和Vector的区别:

ArrayList是jdk1.2版本出来的。安全性低,线程不同步,扩容0.5倍,是在添加一个元素的时候初始化容量10

Vector是jdk1.0版本的,安全性高,线程是同步的(被synchronize的修饰),扩容1.0倍,是在调用无参构造方法的时候调用,初始化容量10。

List是比较特殊的,她不是数组,而是一个链表,链表又有单链表和双链表。链表的特点就是她有前驱和后继。她是利用前驱去连接前一个元素,后继是连接后一个元素。这样他的增删改的速度就很快,但是相同的查询的速度就很慢。

Set接口也有俩个子接口,分别是:TreeSet和HashSet。相同的,因为他俩都是继承的Set因此他俩也都是无序,但是TreeSet是唯一。TreeSet的底层是红黑树,HashSet的底层是哈希表。HashSet还有一个子接口LinkHashSet,这是一个有序的HashSet,也算是将HashSet完善一下。

HashSet原理:在存储自定义对象时,必须重写hashcode()以及equals()方法。

1.调用HashCode方法计算哈希吗值

2.根据y=k(x)计算存储位置,x为哈希码值,y是存储位置

3.如果该位置上面没有元素,则直接添加,如果有元素,则调用equals()进行比较,要是内容相同则不需要添加,如果 内容不同则需要在后面加上链表,当链表结点大于8时,则将链表转为红黑树,目的是为了提高遍历速度



TreeSet:在存储自定义对象时,要求必须具备比较规则,可以使内部比较器Comparable接口,也可以使用外部比较器Comparator接口。

遍历集合的时候都可以用加强for循环还有使用迭代器去循环。

Java修炼——容器体系框架总结的更多相关文章

  1. 《Java并发编程的艺术》第6/7/8章 Java并发容器与框架/13个原子操作/并发工具类

    第6章 Java并发容器和框架 6.1  ConcurrentHashMap(线程安全的HashMap.锁分段技术) 6.1.1 为什么要使用ConcurrentHashMap 在并发编程中使用Has ...

  2. Java并发容器和框架

    ConcurrentHashMap 在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率近100%.因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环 ...

  3. 第六章 Java并发容器和框架

    ConcurrentHashMap的实现原理与使用 ConcurrentHashMap是线程安全且高效的hashmap.本节让我们一起研究一下该容器是如何在保证线程安全的同时又能保证高效的操作. 为什 ...

  4. JAVA并发编程的艺术 Java并发容器和框架

    ConcurrentHashMap ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成. 一个ConcurrentHashMap里包含一个Segment数组, ...

  5. Java修炼——容器HashMap用法

    直接上代码,容器集合之间的关系在后面我会继续详细分析,这次先看HashMap用法 HashMap的方法都在代码中有解释.有需要的可以仔细看看 package com.bjsxt.map; import ...

  6. 013-并发编程-java.util.concurrent.locks之-AbstractQueuedSynchronizer-用于构建锁和同步容器的框架、独占锁与共享锁的获取与释放

    一.概述 AbstractQueuedSynchronizer (简称AQS),位于java.util.concurrent.locks.AbstractQueuedSynchronizer包下, A ...

  7. java中的对象、类、包、模块、组件、容器、框架、架构的概念入门

    在Java中有那么一些概念:对象.类.包.模块.组件.容器.框架.这些概念都有一个共同的特点,就是[容纳]. 对象(Object) 在Java的世界里,对象是通过属性和方法来分别对应事务所具有的静态属 ...

  8. 第48节:Java当中的集合框架

    Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...

  9. 支付宝客户端架构解析:Android 容器化框架初探

    摘要: 本文将介绍支付宝 Android 容器化框架设计的基本思路. 1. 前言 由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框架设计”.“网络优化”.“性能启动优化 ...

随机推荐

  1. ubuntu下minicom和usb串口转接

    ubuntu下minicom和USB转串口(转) (2013-03-23 21:07:54) 转载▼ 标签: it 分类: 嵌入式linux minicom是linux下串口通信的软件,它的使用完全依 ...

  2. SpringMVC错误:nested exception is java.lang.IncompatibleClassChangeError: class org.springframework.core.type.clas

    这是jar包冲突引起的 spring-core.jar已经有asm 所以不用再单独导入asm包了

  3. 《计算机网络 自顶向下方法》 第3章 运输层 Part1

    由于个人精力和智商有限,又喜欢想太多.钻牛角尖,导致学习系统性知识很痛苦,尝试改变学习方式,慢慢摸索 现在看到 rdt2.0,又有点看不下去 现在的想法: 要有个目标,且有截止时间(作业模式.考试模式 ...

  4. 网站搭建 - IIS 填坑 - 终于建好站了 linux + Windows

    之前的IIS可以运行Windows的网页,但是对于php的网页,还是不能够支持,于是决定重新来一遍. (把踩的坑重新描述一下,在下载完php之后,解压后不要急着改文件,跳到最后的页面去改.) 以便能够 ...

  5. Python基础之JSON

    作用 对Python对象进行序列化,便于存储和传输 Python对象与JSON字符串相互转换 Python对象转JSON字符串 import json data = [ { 'a' : 1, 'b' ...

  6. shell——数组

    默认从0开始索引:也可以单独(像字典一样)pid[35420]=httpd -k ssl, 只能是一维的 bash4.0增加了关联数组 数组赋值: declare -a myarray声明数组 一次一 ...

  7. 调用RESTful GET方法

    package restclient; import java.io.BufferedReader; import java.io.IOException; import java.io.InputS ...

  8. 【algo&ds】8.最小生成树

    1.最小生成树介绍 什么是最小生成树? 最小生成树(Minimum spanning tree,MST)是在一个给定的无向图G(V,E)中求一棵树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图 ...

  9. mybatis源码学习(一) 原生mybatis源码学习

    最近这一周,主要在学习mybatis相关的源码,所以记录一下吧,算是一点学习心得 个人觉得,mybatis的源码,大致可以分为两部分,一是原生的mybatis,二是和spring整合之后的mybati ...

  10. python接口自动化测试——简单的文件上传代码实现,人人网登陆后上传图片举例

    import requests '''人人网登陆,图片上传 '''def loginData(): '''登录请求参数''' data = { 'email': '13484545195', 'ico ...