Java容器归纳

Collection :

|--SubInterface

|--Set

|-- SortSet

|-- TreeSet

内部实际为TreeMap对象。

通过compareTo方法进行比较。

比较大的在left,小的在right端。

|-- HashSet

内部实为HashMap或LinkedHashMap,add方法实际是调用map的put

无重复对象:需要重写hashCode和equals方法。

无序

允许存入null

不同步

|--List

|-- ArrayList

实际内部就是数组

new ArrayList()时创建一个空数组。add方法时初始化大小,默认值为10。

如果存满了之后,进行扩容,扩容按照公式:原容量+原容量>>1;

|-- LinkList

里面是Node对象first,last。

add调用的是linkLast方法,如果last为空,last和first都是这个对象。

add方法如下:

final Node<E> l = last;
 final Node<E> newNode = new Node<>(l, e, null);
 last = newNode;
 if (l == null)
   first = newNode;
 else
   l.next = newNode;
 size++;
 modCount++;

|-- Vector

内部实为对象数组。调用add方法时初始化大小,默认值为10。

存满了之后,进行扩容,如果传入扩容数量,则按扩容数量进行扩容,如果没有传入,则按原容量进行扩容。

add方法是同步的。

Map

|--HashMap:AbstractMap的子类

HashMap中实际上是一个一个的Map.Entry的实现类Node对象。即HashMap实际上是Node的数组。默认大小为16个,默认临界值为12,

当HashMap中的元素数超过12的时候,进行扩容,每次进行*2的扩容。

put方法是非同步的,允许null键和null值。

put的时候会调用方法的hashCode方法和equals方法进行键的比较。

get方法是非同步的。

get方法即是调用getNode然后比较对象的hashCode和值(equals)如果存在,返回。

|--LinkedHashMap

|--HashTalbe:Dictionary的子类

HashTable中实际是一个一个的Map.Entry的实现类Entry对象。即HashTable实际上是Entry的数组。默认大小为11个,默认临界值为8.

当HashTable中的元素数超过8的时候,进行扩容,每次进行*2+1的扩容。临界值是容量的.75f倍。

put方法是同步的,不允许null键和null值。

put方法会调用对象的hashCode和equals方法进行键的比较。

get方法是同步的。

get方法会调用对象的hashCode和equals来比较键的值,如果存在,返回。

|--SortedMap

|--TreeMap

上面是自己的一些总结,欢迎大神指正、补充!~

时间: 2024-07-29 15:25:34

Java容器归纳的相关文章

java 容器Collection List Set Map概述

对JAVA的集合的理解是想对于数组 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型) JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法. Set 和

给Java新手的一些建议----Java知识点归纳(J2EE and Web 部分)

J2EE(Java2 Enterprise Edition) 刚出现时一般会用于开发企业内部的应用系统,特别是web应用,所以渐渐,有些人就会把J2EE和web模式画上了等号.但是其实 J2EE 里面并不仅仅是web,可以看到很多其中的规范都是通用的,目的是为了高效开发出健壮的服务企业业务模式的应用系统.J2EE中也是可以没有web界面的应用,而现在面向大众用户开发的网站往往也会使用到很多的J2EE的技术,所以J2EE和web开发的概念都是融合在了一起了. 我本人在JAVA开发刚入行的时候,也是

Java 容器 & 泛型:一、认识容器

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 容器是Java语言学习中重要的一部分.泥瓦匠我的感觉是刚开始挺难学的,但等你熟悉它,接触多了,也就"顺理成章"地知道了.Java的容器类主要由两个接口派生而出:Collection和Map. 一.Collection vs Collections 首先,Collection 和 Collections 是两个不同的概念.之所以放在一起,是为了更好的比较.Collection是容器层次结构中

Java 容器

在实际问题中我们经常需要处理数据,单纯依靠数组来存储数据对开发来说非常困难,java提供了一套容器来方便我们编程.对java容器有一个整体的了解对我们来说非常重要,这样在需要特定容器时,不会手忙脚乱,本文主要介绍java的一些基本容器,而不要仅知道使用ArrayList.下面的图片是java中的简单容器分类   --图片来自网络 java定义了四种容器类型,List.Set.Queue和Map. 其中List.Set.Queue都实现了Collection接口,下面来看看这4中类型的容器. Co

java容器---集合总结

思考为什么要引入容器这个概念? Java有多种方式保存对象(应该是对象的引用),例如使用数组时保存一组对象中的最有效的方式,如果你想保存一组基本类型的数据,也推荐使用这种方式,但大家知道数组是具有固定尺寸的,你必须事先知道你要需要多少个对象.但是在一般的情况中,你在写程序中并不知道将需要多少个对象,或者是否需要更加复杂的方式来存储对象,因此数组尺寸固定很不爽! 为了解决上述问题,引入了容器的概念.容器提供了完善的方法来保存对象,你可以使用这些工具来解决数量惊人的问题.Java容器类可以自动调整自

Java 容器在实际web项目中应用

前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用法.可结合图片代码了解Java中的容器 备注 :这个地方 ,参考于朝向远方的博客Java容器详解,既然前人总结的这么好,我就直接拿来用,在这里更注重在实际开发中的例子,感谢那些总结的前辈们,辛苦了. 简单的数组例子 Thinking in Java 中并没有把数组归为Java的容器,实际上数组的确不是Java

Java 容器在实际项目中的应用

前言:在java开发中我们离不开集合数组等,在java中有个专有名词:"容器" ,下面会结合Thinking in Java的知识和实际开发中业务场景讲述一下容器在Web项目中的用法.可结合图片代码了解Java中的容器 备注 :这个地方 ,参考于朝向远方的博客Java容器详解,既然前人总结的这么好,我就直接拿来用,在这里更注重在实际开发中的例子,感谢那些总结的前辈们,辛苦了. 简单的数组例子 Thinking in Java 中并没有把数组归为Java的容器,实际上数组的确不是Java

Java面试题-Java容器

一.Java容器分类 Java容器划分为两个概念Collection.Map Collection: 一个独立元素的序列,这些元素都服从一条或多条规则.List必须按照插入的顺序保存元素,不关心是否重复:Set不能有重复元素:Queue一端插入一端输出.所有的Collection都可以用foreach语法遍历 实现:List:ArrayList.LinkedList:   Set:HashSet.TreeSet.LinkedHashSet   Map:HashMap.TreeMap.Linked

java容器集合类

容器就是容纳物品,放置物品的东西,对Java来说,一切皆是对象,他的容器就是能保存java的对象的类.由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都要能能提供方便的查询.遍历.修改等基本接口功能. 早期的OOP语言都通过数组的方式来实现对引用集的集中管理和维护.但是数组方式下,数组大小需要提前被确定,并不允许修改大小,导致其作为一种灵活的数据容器的能力的功能大为下降. 为了方便的利用数据容器进行引用的管理,Java中提供了丰富的数据容器以满足程序员多样化的需求. j