1.HashSet内置了一个HashMap,将对象保存为HashMap的key,复用HashMap的算法来保证对象不可重复
但当创建时有第三个参数boolean dummy时,就用LinkedHashMap来管理
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);
}
2.ArrayList是用数组实现的
LinkedList用链表实现,使用内部类内置了一个Entry
3.HashMap有一个内部类用来管理key和value的映射,Entry有参数next、previous来指向下一个或上一个entry,key和value来存储键和值。
4.创建HashMap时可以
public HashMap(int initialCapacity, float loadFactor)
initialCapacity是初始HashMap的大小(HashMap也是有数组维护的),loadFactor默认是0.75表示Map的维度,当已存储的数据数大
于总数组容量的0.75时,即总容量广大一倍。loadFactor可大可小,当较大时,数组扩充的频率低,但构建哈希表时冲突会更多,而
更慢;较小时,数组扩充频率高,但构建哈希表会更快,插入数据也会更快。
5.LinkedHashMap继承了HashMap,也是用数组存储数据,它之所以叫Linked,因为它维护了3个对象(head(最顶端的元素),before(之前的元素),after(之后的元素)),虽然也继续了父类的next和previous,但基本没有使用。
6.java有个特点就是序列化,简单地来说就是可以将这个类存储在物理空间(当然还是以文件的形式存在),那么当你从本地还原这个文件时,你可以将它转换为它本身。这可以极大地方便网络上的一些操作,但同时,因为涉及到安全问题,所以并不希望把类里面所有的东西都能存储(因为那样,别人可以通过序列化知道类里面的内容,比如密码),那么我们就可以用上transient这个关键字,它的意思是临时的,即不会随类一起序列化到本地,所以当还原后,这个关键字定义的变量也就不再存在。
7.Hashtable也是一个Map,不过它是从jdk1.0就存在的,Map是1.2才有的,后来HashTable应该有过修改,使得它也实现了Map接口,但它仍然继承了虚类Dictionary,它也是从jdk1.0就存在的,用来存储这种键-值对应关系的对象集。但接口无限优于继承,所以自从Map接口出来以后,Dictionary就成了一个obsolete(废弃)类,而jdk以后出来的Map比如HashMap就都是实现Map接口。
8.Hashtable和HashMap基本功能相同,不同点是,它们创建哈希表用的算法不同,Hashtable还是线程安全的,它的第一个方法前都有synchronized标识,而且HashMap保存的对象的key和value都可以分别为空,但Hashtable两个都不能为空。
HashMap: if (key == null)
return putForNullKey(value);
Hashtable:if (value == null) {
//当key为null时,由于上面的putForNullKey方法,所以调用key.hashcode()时也会抛出空指针异常
throw new NullPointerException();
}
9.ArrayList和Vector都是用数组来维护的,其中,Vector是同步的;它们和合快速访问和查找,但由于数组之间是不能有空隙的,当该数组空间不够时,需要创建另一个更大的数组再把数据拷过去,所以会很浪费时间。LinkedList是用链表维护,里面的每个对象都有一个到下一个对象的引用,所以不需要提前申请空间。适合快速插入和遍历,但不适合随机查找。
10.LinkedList封装了一些别的list没有的方法,可以作为队列、和双向列表使用。(其实用栈可以用Vector的子类Stack),放在头部(addFirst=push),放在尾部(addLast=offer),取出尾部(removeLast),取出头部(pop=removeFirst)。(具体参考Deque接口的api,对queue和stack的各个方法都有说明)。
11.LinkedList在1.5及以前的版本实现了Queue接口,使其可以当作队列,在1.6以后,实现了Deque接口(继承了Queue接口,但它是个双向列表)。
分享到:
相关推荐
Java集合框架还包含了一些工具类,如`Collections`(提供了对集合的各种操作,如排序、填充和反转)、`Comparator`(用于自定义元素比较逻辑)和`Iterator`(遍历集合元素的接口)。 至于集合排序,Java提供了两种...
关于源码,Java集合框架的实现类通常包含了许多内部细节,比如数据结构的优化、线程安全的考虑等。例如,`ArrayList`底层使用的是动态增长的数组,而`LinkedList`则由双向链表构成,它们在插入和删除操作上的性能...
在这个“java资料各种集合”中,我们可以期待找到关于Java集合框架的各种深入讲解和实用示例。 1. **ArrayList与LinkedList** ArrayList和LinkedList都是List接口的实现,用于存储有序的元素。ArrayList基于动态...
在这个“java集合练习题”中,我们主要关注如何使用Java集合框架来处理数据,特别是对于学生信息的存储、排序和输出。以下是对这个练习题的详细解析: 1. **集合框架简介**: Java集合框架是Java API的一部分,它...
总结来说,Java集合框架提供了丰富的数据结构和算法,适应各种场景下的数据存储需求。理解并熟练掌握这些集合类的特性和使用方法,对于提升Java编程能力至关重要。通过思维导图的学习,可以有效地梳理知识脉络,让...
Java 集合排序及java 集合类详解 Java 集合排序及java 集合类详解,Java...本教程详细解释了关于Java中的集合是如何实现的, 以及他们的实现原理等,涉及的部分内容:Collection , List ,Set , Map , 集合, 框架等。
在这个“java各种jar包集合”中,我们找到了一系列与JavaScript模板语言(JSTL)、JSON处理、以及Struts框架相关的jar包。 1. JSTL(JavaServer Pages Standard Tag Library):这是一个用于JSP页面的标准标签库,...
自定义集合类则是开发者根据特定需求扩展Java集合框架的行为,以满足个性化或特定业务场景的功能需求。以下是对"java自定义集合类"这一主题的详细解释。 首先,Java集合框架包括接口(如List、Set、Map)和实现这些...
Java工具类集合是Java开发中不可或缺的一部分,它们提供了一系列便捷的方法,帮助开发者高效地处理各种常见任务。在Java中,工具类通常被组织在各种包下,如`java.util`、`java.lang`、`java.io`等。下面将详细介绍...
Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了数据结构和算法的实现,使得开发者可以方便地存储和管理对象。在这个“java开发集合例子”中,我们将深入探讨Java集合框架的一些核心概念和常见使用...
Java 集合类别详解 Java 是一种基于对象的编程语言,它提供了多种集合类别来存储和操作数据。集合类别是 Java 编程语言的核心部分,它们提供了强大的数据存储和操作功能。今天,我们将深入了解 Java 中的集合类别,...
适合Java进阶集合篇,集合知识点详解
Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的接口和类。在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java...
这个系统是图书管理系统 实现了基于java集合的图书管理系统 分了包 该图书管理系统实现了一下功能:登录、注册、图书管理、图书的增加、删除、修改、查看、对管理员用户的增加、删除、修改和查看。是个人纯手打的...
以下是关于Java集合类,特别是HashMap、CurrentHashMap、ArrayList和LinkedList的详细知识点: 1. **HashMap**: HashMap是Java中最基本的键值对存储结构,基于哈希表实现。它提供了快速的插入、删除和查找操作,...
Java集合与通用集合是Java编程中的重要组成部分,主要用于存储和管理对象。集合框架自Java 1.2引入以来,已经成为Java开发中不可或缺的工具。在Java高级编程中,理解并熟练掌握集合的使用至关重要。 首先,集合框架...
JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1),JAVA 经典算法集合(1)JAVA 经典算法集合(1),JAVA 经典...
在Java编程语言中,集合框架是处理对象组的重要工具,它提供了一种高效、灵活的方式来存储和操作数据。本文将深入探讨Java中的集合操作,并结合PPT(虽然这里没有提供具体的PPT内容,但通常这样的资源会包含示例、...