Java修炼——容器体系框架总结
容器有俩大接口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修炼——容器体系框架总结的更多相关文章
- 《Java并发编程的艺术》第6/7/8章 Java并发容器与框架/13个原子操作/并发工具类
第6章 Java并发容器和框架 6.1 ConcurrentHashMap(线程安全的HashMap.锁分段技术) 6.1.1 为什么要使用ConcurrentHashMap 在并发编程中使用Has ...
- Java并发容器和框架
ConcurrentHashMap 在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率近100%.因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环 ...
- 第六章 Java并发容器和框架
ConcurrentHashMap的实现原理与使用 ConcurrentHashMap是线程安全且高效的hashmap.本节让我们一起研究一下该容器是如何在保证线程安全的同时又能保证高效的操作. 为什 ...
- JAVA并发编程的艺术 Java并发容器和框架
ConcurrentHashMap ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成. 一个ConcurrentHashMap里包含一个Segment数组, ...
- Java修炼——容器HashMap用法
直接上代码,容器集合之间的关系在后面我会继续详细分析,这次先看HashMap用法 HashMap的方法都在代码中有解释.有需要的可以仔细看看 package com.bjsxt.map; import ...
- 013-并发编程-java.util.concurrent.locks之-AbstractQueuedSynchronizer-用于构建锁和同步容器的框架、独占锁与共享锁的获取与释放
一.概述 AbstractQueuedSynchronizer (简称AQS),位于java.util.concurrent.locks.AbstractQueuedSynchronizer包下, A ...
- java中的对象、类、包、模块、组件、容器、框架、架构的概念入门
在Java中有那么一些概念:对象.类.包.模块.组件.容器.框架.这些概念都有一个共同的特点,就是[容纳]. 对象(Object) 在Java的世界里,对象是通过属性和方法来分别对应事务所具有的静态属 ...
- 第48节:Java当中的集合框架
Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...
- 支付宝客户端架构解析:Android 容器化框架初探
摘要: 本文将介绍支付宝 Android 容器化框架设计的基本思路. 1. 前言 由本章节开始,我们将从支付宝客户端的架构设计方案入手,细分拆解客户端在“容器化框架设计”.“网络优化”.“性能启动优化 ...
随机推荐
- php swoole异步处理mysql
php swoole异步处理mysql <pre>//创建websocket服务器对象,监听0.0.0.0:9509端口//异步测试$ws = new swoole_websocket_s ...
- C++程序员学Python
目录 C++程序员学Python 第二章.变量和数据类型 1.注释语句前用#: 2.常用于大小写函数: 第三章.列表 1.列表简述 2.修改,增加,插入,删除列表元素 第四章操作列表 1.遍历 2.创 ...
- 给大家整理了几个开源免费的 Spring Boot + Vue 学习资料
最近抽空在整理前面的文章案例啥的,顺便把手上的几个 Spring Boot + Vue 的学习资料推荐给各位小伙伴.这些案例有知识点的讲解,也有项目实战,正在做这一块的小伙伴们可以收藏下. 案例学习 ...
- CSS如何设置列表样式属性
列表样式属性 在HTML中有2种列表.无序列表和有序列表,在工作中无序列表比较常用,无序列表就是ul标签和li标签组合成的称之为无序列表,那什么是有序列表呢?就是ol标签和li标签组合成的称之为有序列 ...
- 设置 DNS 服务器转发试验
一.主节点的配置 1.yum install bind -y 安装 DNS 服务 2.vim /etc/named.conf 编辑 DNS 的配置文件 3. vim /etc/named.rfc191 ...
- Hadoop之HDFS读写原理
一.HDFS基本概念 HDFS全称是Hadoop Distributed System.HDFS是为以流的方式存取大文件而设计的.适用于几百MB,GB以及TB,并写一次读多次的场合.而对于低延时数据访 ...
- Code Runner for VS Code 突破 1000 万下载量!支持运行超过 40 种语言
记得三年多前,韩老师那时还在写 PHP(是的,没错!在微软写 PHP),同时需要写 Python 和 Node.js .所以在那时,支持多种语言的 VS Code 已经是笔者的主力编辑器了.唯一不足的 ...
- 在ensp上利用三层交换机实现VLAN间路由
我们在实际生活中经常要跨vlan进行通信,我们的解决办法有单臂路由,但是单臂路由存在很大的局限性,带宽,转发效率等,所以单臂路由用的就有点少,所以就有了本章节 三层交换机在原有的二层交换机的基础上,增 ...
- vue引用组件的两个方法
<template> <div> <myComponent></myComponent> </div> </template> ...
- Openlayers 实现轨迹播放/暂停/重新播放/从点击处播放/提速/减速
说明: 我的需求是需要实现轨迹播放/暂停/重新播放/从点击处播放,因此封装了一个类 解决方案: 1.初始化:主要是处理一下图层以及数据,通过插值构造一个全局数组 /** * @description ...