大家好,又见面了,我是你们的朋友全栈君。 Java的容器 在Java中,我们想要保存对象可以使用很多种手段。最简单的就是数组。...但是数组具有固定的尺寸,而通常来说,程序总是在运行时根据条件来创建对象,我们无法预知将要创建对象的个数以及类型,所以Java推出了容器类来解决这一问题。...Java容器的基本概念 Java容器类库是用来保存对象的,他有两种不同的概念: Collection,独立元素的序列,这些元素都服从一条或多条规则。...Collection和Map 在Java容器中一共定义了2种集合, 顶层接口分别是Collection和Map。但是这2个接口都不能直接被实现使用,分别代表两种不同类型的容器。...Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”。
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 容器是Java语言学习中重要的一部分。...泥瓦匠我的感觉是刚开始挺难学的,但等你熟悉它,接触多了,也就“顺理成章”地知道了。Java的容器类主要由两个接口派生而出:Collection和Map。...Collection是容器层次结构中根接口。而Collections是一个提供一些处理容器类静态方法的类。...实际上:因为所有通用的容器类遵从Collection接口,用第二种构造方法是允许容器之间相互的复制。 二、Collection的类层次结构 下面的图是关于Collection的类的层次结构。...四、容器接口的小结 五、代码样例 对HashMap,HashSet,LinkedList,ArrayList,TreeMap,TreeSet的例子如下: import java.util.ArrayList
一、绝对定位 ---- 绝对定位 是以 父级元素 为基准 , 设置 边偏移 ; 为 子元素 添加 绝对定位 , 如果 父容器有定位 , 则相对于父容器的坐标进行定位 ; 如果 父容器没有定位 , 则相对于浏览器左上角位置进行定位...; 再次引申 , 如果父容器没有定位 , 则查找父容器的父容器 是否有定位 , 如果有则相对于爷爷容器进行定位 ; 上述 父容器 的定位 不一定是 绝对定位 , 其它类型的定位也可以 , 在本博客的示例中..., 使用的就是 相对定位 ; 为父容器添加了相对定位 , 子容器也会相对于 父容器 进行定位 ; 二、标准流下的父容器与子元素关系 ---- 1、标准流下父容器与子容器代码 标准流 父容器 中 包含一个...移动 标准流 父容器盒子 , 发现子容器也随着 父容器 一起移动 , 这种情况下 父容器 与 子容器 是绑定到一起的 ; 为父容器设置 100 像素的外边距 , 此时 父容器 与 嵌套的子元素 一起向下和向右移动了..., 子容器相对于浏览器进行定位 ; 2、父容器有定位的情况下为子容器添加定位 在上面代码的基础上 , 为父容器添加 relative 相对定位 , 不设置边偏移 , 也就是位置相对于标准流的原始位置偏移
本文主要介绍JAVA中常见容器间的关系和主要区别。JAVA中的容器种类很多,且各有特点。为此特意进行学习研究,写下此文,作为一点总结。若有错误,欢迎拍砖。...上图是JAVA常见的各个容器的继承关系,我们就顺着继承关系说一下各个接口或者类的特点吧。 ---- Iterable 接口 Iterable是一个超级接口,被Collection所继承。...Java中的Iterator功能比较简单,并且只能单向移动: (1) 使用方法iterator()要求容器返回一个Iterator。...Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。 ...java的集合和数学的集合一样,满足集合的无序性,确定性,单一性。所以可以很好的理解,Set是无序、不可重复的。同时,如果有多个null,则不满足单一性了,所以Set只能有一个null。
同步容器 在 Java 中,同步容器主要包括 2 类: Vector、Stack、HashTable Vector 实现了 List 接口,Vector 实际上就是一个数组,和 ArrayList 类似...Stack 也是一个同步容器,它的方法也用 synchronized 进行了同步,它实际上是继承于 Vector 类。...Collections 类中提供的静态工厂方法创建的类(由 Collections.synchronizedXxxx 等方法) 同步容器的缺陷 同步容器的同步原理就是在方法上用 synchronized...性能问题 由于被 synchronized 修饰的方法,每次只允许一个线程执行,其他试图访问这个方法的线程只能等待。显然,这种方式比没有使用 synchronized 的容器性能要差。...但是在并发容器中不会出现这个问题。 并发容器 JDK 的 java.util.concurrent 包(即 juc)中提供了几个非常有用的并发容器。
容器的种类 为什么要使用容器? 因为数组不能够满足日常的开发需求,数组有以下弊端: 长度难以扩充 数据的类型必须相同 数组无法获得有多少个真实的数据,只能获得数组的长度。...在Java中有常用的三种类型的容器,分别是List 、Map、Set,基于这个三个基本的类型,派生出很多其它的类型,具体关系如下: ?...三者的区别: Set(集):与list都是有Collection类的派生出来, 分辨各个元素的标识是HashCode,所以元素不能有重复 List(列表):是一个有序的列表,元素如果有重复,也会一一列出来...各个容器的说明和使用 ---- List ---- ArrayList ArrayList是List一个派生类,非线安全,是基于Object数组实现的可动态扩展的容器,在调用Add的时候会判断当前的长度是否已经超过了...手工实现容器ArrayList 根据上面的分析,我们可以手工实现一个ArrayList 代码如下: public class MyArrayList { private Object[] _
文章目录 java的容器 数组 Collection 实例 java的容器 容器中可以保含多个对象,每个对象称为容器的一个元素.容器是用对象封装的数据结构....数组 数组是最常见的数据结构.数组是相同的类型元素的有序集合,并有固定的大小.数组可以根据下标(index)来随机存取元素....Collection 表(List)和集合(set)是java.util中定义的两个接口(interface); 集合(set)也是元素的集合。...使用put()方法来添加元素,用get()方法来获得元素. keyset()将所有的键转化为set values()将所有的值转化list java的参数和局部变量只能是基本类型的变量,或者对象的引用(...实例 import javax.swing.*; import java.awt.*; public class guilrn { private static void createAndShowGUI
容器是Java语言学习中重要的一部分。泥瓦匠我的感觉是刚开始挺难学的,但等你熟悉它,接触多了,也就“顺理成章”地知道了。Java的容器类主要由两个接口派生而出:Collection和Map。...Collection是容器层次结构中根接口。而Collections是一个提供一些处理容器类静态方法的类。 ?...实际上:因为所有通用的容器类遵从Collection接口,用第二种构造方法是允许容器之间相互的复制。 二、Collection的类层次结构 下面的图是关于Collection的类的层次结构。 ?...实现map的有:HashMap、TreeMap、HashTable、Properties、EnumMap。下图是Map的JDK源码UML图。 ? 四、容器接口的小结 ?...java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import
Java的容器类分为List,Set,Queue和Map。我们也称它们为集合类(Collection)。...Java使用泛型来实现容器类,例如我们要使用顺序表这一数据结构,Java提供了ArrayList和LinkedList两种实现类,ArrayList的实现就是基于数组的。...Java7及Java8的容器 如果你是一个喜欢新事物,也不妨尝试下Java7,它可以对泛型的目标类型进行推断。...通过前面方法参数类型推断泛型的类型 List.cons(42, List.nil()); Java容器的基本概念 Java容器类库是用来保存对象的,他有两种不同的概念: Collection。...在接下来的几节我会依次和大家介绍Java容器类中的几种接口。 List List可以将元素维护在特定的序列中。
Java 中容器框架的内容可以分为三层: 接口(模型), 模板和具体实现。 在开发中使用容器正常的流程是,首先根据需求确定使用何种容器模型,然后选择一个符合性能要求的容器实现类或者自己实现一个容器类。...上面所说的模型在容器框架中对应的是接口。在容器框架中根据它的特征可以作如下划分。 Collection, Map 高度抽象的容器接口。...Java 容器接口类图 接口的所有操作都包含在类图当中了。...下面我们按照分类讲一下它们的具体功能 高度抽象的容器接口 ---- Collection 它是整个集合系容器的 Root(尽管它继承了Iterable)。...ListIterator listIterator(); ListIterator listIterator(); // 这里会产生一个子列表,不过所有对它的操作都会映射到父列表中。
Java容器大全 一、集合框架 二、Iterator 题外话 1. C++中的Reference与Pointer 2....Array与Set互转 一、集合框架 Java集合框架(java.util包)主要包括两种类型的容器:一种是集合Collection,存储一个元素集合;另一种是图Map,存储键值对映射。...迭代器是一种设计模式,是一个标准化遍历各类容器里面的所有对象的方法类,可以遍历并选择序列中的对象而不用关心底层结构。Java中的Iterator功能较为简单,只能单项移动。...Java中的Reference Java中的引用可以随意赋值,并且可以为null,可以理解成一个披着C++中reference的pointer。...实际上,Java中的reference就是一个地址,地位等同于C++中的point。 2.
ArrayList,HashSet,HashMap都是线程非安全的,在多线程环境下,会导致线程安全问题,所以在使用的时候需要进行同步,这无疑增加了程序开发的难度。所以JAVA提供了同步容器。...但是,Vector并不是线程安全的。 Stack也是一个同步容器,也是使用synchronized进行同步,继承与Vector,是数据结构中的,先进后出。...(Thread.java:748) 原因分析 Vector是线程同步容器,size(),get(),remove()都是被synchronized修饰的,为什么会有线程安全问题呢?...同步容器虽然是线程安全的,但是不代表在任何环境下都是线程安全的。 HashTable 线程安全,key,value都不能为null。在修改数据时锁住整个HashTable,效率低下。...总结 同步容器采用synchronized进行同步,因此执行的性能会受到影响,并且同步容器也并不一定会做到线程安全。 [wx.jpg]
队列 除并发应用,Queue在Java SE5中仅有两个实现 LinkedList和PriorityQueue,差异在于排序行为,而不是性能。...标准的java库包含了Map的几种基本实现:HashMap,TreeMap,LinkedHashMap,WeakHashMap,ConcurrentHashMap,IdentityHashMap。...hashCode()是根类Objcet中的方法,因此所有Java对象都能 产生散列码, HashMap就是使用对象的hashCode()进行快速查询的,此方法能够显著提高性能。...Map实现类型 具体特性 HashMap Map基于散列表的实现(它取代了Hashtable)。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量和负载因子,以调整容器的特性。...参考资料 《Java编程思想》(第4版)
一、需求分析及核心开发要点 ---- 要实现如下功能 , 下图 粉色 部分是 整体 父容器 , 紫色元素 是 中心的核心位置 , 蓝色是左上角的浮标 , 红色是右下角的浮标 ; 首先分析父容器元素...; 由于 子元素 需要使用 绝对定位 , 此处的 父容器 必须设置 相对定位 ; 上图中 , 父容器存在 1 像素的边框 , 父容器 中设置一个内边距 ; 设置子元素浮动后 , 浮动的元素 可以覆盖到...内边距 范围 ; /* 最外层 父容器盒子 */ .box { /* 子元素设置绝对定位 父元素需要设置相对定位 */ position: relative; /* 内容尺寸...的尺寸大小一致即可 ; 这是一个标准流元素 , 在父容器中正常显示 ; /* 标准流元素 */ .center { width: 300px; height: 200px;...相对定位 , 相对定位会保留元素原始位置 , 其它标准流元素无法使用该位置 ; 因此此处只能使用绝对定位 , 在设置了相对定位的父元素容器中 , 可以使用绝对定位在父容器的任意位置显示任何元素 ;
, int distance); // 替换 boolean replaceAll(List list, T oldVal, T newVal); // target列表在source列表中的位置...> target); XXX = {Collection, Set, SortedSet, List, Map, SortedMap}; // 返回一个内容不可更改的 XXX 容器 XXX unmodifiableXXX...(XXX xxx); // 返回一个线程安全的 XXX 容器 XXX synchronizedXXX(XXX xxx); // 返回一个 XXX 容器,在编译期就进行类型检查 XXX checkedXXX...emptyYYY(); // 返回只有一个元素的容器 Set singleton(T o); List singletonList(T o); Map singletonMap...(K k,V v); List nCopies(int n, T o); //返回一个有n个o对象的列表 Comparator reverseOrder(); // 返回一个逆序比较器
Java 容器就是我们开发中的利器。 然而,之前在开发中使用仅仅是容器的一小部分。这次从源码的角度进行深入的理解,一点总结分享给大家。 这里只列举了非阻塞式的容器;阻塞式的容器,会在后面的并发篇补。...: // 缩小容器的容量到元素的数量 public void trimToSize(); // 确保容量能覆盖 minCapacity 个元素 public synchronized void ensureCapacity...线程安全:否; failfast保护 容量: 同LinkedHashMap 效率: 同LinkedHashMap TreeSet ---- 特征: 带全排序的集合容器 实现:TreeMap 线程安全:...所以它可以用来做LRU缓存容器,不过在此之前需要对他做一些封装,需要定义缓存的体积和重写一些方法: //这里的accessOrder要设置为true public LinkedHashMap(int initialCapacity...这意味着容器中的对象在没有外部引用持有的时候随时都有可能被GC回收。所以它可以被用来做缓存。
ArrayList 数组容器类,实现了List,RandomAccess,Cloneable,Serializable四个接口,继承自AbstractList,具有动态扩容,随机访问,可复制,可序列化四个主要功能...size; //容器存放的元素大小 elementData 数组用于存放容器,transient 表明容器内的元素不能被序列化。...扩容 ArrayList 有三个构造函数 ArrayList(int initialCapacity) //指明容器大小 ArrayList() // 默认容器初始化大小 ArrayList(Collection...extends E> c) // 通过Collection构建容器 这里讲一下第二个构造函数,这个函数只做了一件事,赋空数组。...使用规范 阿里的Java操作手册中有如下几点强制规范(这里引用一下): 【强制】ArrayList的subList结果不可强转成ArrayList。
/** * w1在w2中按比例缩放 * @param w1 * @param h1 * @param w2 * @param h2 */ funct...
在计算机中管理对象亦是如此,当获得多个对象后,也需要一个容器将它们管理起来,这个容器就是集合。 集合本质是基于某种数据结构数据容器。...本文将为大家介绍Java中的集合。 一、集合概述 Java中提供了丰富的集合接口和类,它们来自于java.util包。...如下图所示是Java主要的集合接口和类,从图中可见Java集合类型分为:Collection和Map,Collection子接口有:Set、Queue和List等接口。...Tips:在Java SE中List名称的类型有两个,一个是java.util.List,另外一个是java.awt.List。java.util.List是一个接口,这本章介绍的List集合。...而java.awt.List是一个类,用于图形用户界面开发,它是一个图形界面中的组件。
当我们用增强for循环遍历非并发容器(HashMap、ArrayList等),如果修改其结构,会抛出异常 ConcurrentModificationException,因此在阿里巴巴的Java规范中有说到...ConcurrentModificationException的含义 ConcurrentModificationException可以将其通俗的翻译为 并发修改异常,那么关注点就在 并发和 修改了。...也许有些人会说,我只是在单线程中修改了,并没有并发操作,但系统也抛了这样的这样的错误,这是为什么呢?...这个异常就是应用程序在做一些系统不允许的操作时抛出的。记住,只要是系统不允许的操作,就一定会抛错的。...既然如此,我们来看看for循环中遍历修改容器结构,系统是如何知道的。
领取专属 10元无门槛券
手把手带您无忧上云