List
ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差;LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快。
Map
HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类。建议使用HashMap,而不要使用HashTable。他们之间的区别在于:
- HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。
- HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
- HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。
- HashTable使用Enumeration,HashMap使用Iterator。
它们的实现也有很大的不同:
HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
哈希值的使用不同,HashTable直接使用对象的hashCode。
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);
static int hash(Object x) {
int h = x.hashCode();
h += ~(h << 9);
h ^= (h >>> 14);
h += (h << 4);
h ^= (h >>> 10);
return h;
}
static int indexFor(int h, int length) {
return h & (length-1);
}
补充
1. Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
2. 在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
分享到:
相关推荐
Java容器是Java编程中至关重要的一个部分,它们用于存储、管理和操作对象集合。在这个主题下,我们将深入探讨Java中的核心容器类,包括数组、List、Set和Map,以及它们各自的特点和使用场景。 1. **数组**:数组是...
### Java集合容器知识点详解 #### 一、集合容器概述 - **定义**:集合容器是Java平台提供的标准组件,主要用于存储对象。集合框架提供了一套统一的接口和实现,使得开发者能够灵活地处理不同类型的数据集合。 ####...
Java集合容器面试题 Java 集合容器是 Java 语言中的一种数据结构,用于存储和操作数据。集合容器框架是 Java 中的一个重要组件,提供了一种统一的标准来存储和操作数据。下面是关于 Java 集合容器的知识点: 集合...
Java集合框架的主要优点包括提高程序效率、易于扩展、代码复用性高以及提供不同API之间的简易互操作性。 集合框架包含三个主要组成部分:对外的接口、接口的实现和集合操作的算法。集合接口是定义集合功能的抽象...
3. **JDK**: 了解Java开发工具包(JDK)的安装与配置方法,熟悉JRE和JDK之间的区别。 4. **异常处理**: 掌握异常处理机制,学会使用try-catch-finally语句处理程序运行时可能出现的问题。 5. **集合框架**: 熟悉Java中...
本文将深入探讨Jetty的基本概念、特性以及如何在Java项目中使用它。 1. **Jetty简介** - Jetty是由Eclipse基金会维护的开源项目,它提供了HTTP服务器、Servlet容器和WebSocket服务器等功能。 - 与Tomcat等其他...
Java集合容器概述、集合框架、List、Set、Map接口、Iterator、ArrayList、LinkedList、Vector、HashSet、HashMap、Queue、BlockingQueue、ConcurrentHashMap等。 Java 集合容器概述 Java 集合容器是用于存储数据...
这篇文档主要探讨了17个关于Java容器的关键问题,涵盖了不同类型的容器、它们的区别、实现原理以及线程安全等方面。 1. **Java容器都有哪些?** Java容器主要分为三类:Collection、List和Map。Collection是最基本...
- 在基本类型与包装类之间自动转换。 ##### 5. 枚举类型 - 用于创建一组固定的常量。 ##### 6. 泛型 - 泛型提供了一种类型安全的集合类实现方式。 #### 十、总结 本文系统地介绍了 Core Java 的基础知识,覆盖了...
- 而使用`javax`相关的技术栈则更倾向于传统的Java EE容器部署方式。 综上所述,`java`与`javax`在Java生态系统中扮演着不同的角色。理解它们之间的区别有助于开发者更好地选择合适的技术栈来满足项目需求。无论是...
在使用 FlowLayout 时,可以对内部控件之间、内部控件与容器之间的间距进行设置。setHgap(int hgap) 方法用于指定水平间距;setVgap(int vgap) 方法用于指定垂直间距。 FlowLayout 的构造函数有多种,包括无参数...
在Java程序设计中,基本数据类型和基本操作是编程的基础。本篇将详细阐述这些关键概念。 2.1 引言 在Java中,程序是由数据和对数据进行操作的指令组成的。基本数据类型是构建程序的基础,它们包括数值、字符和布尔...
9. **集成与部署**:最后,将Java程序与PLC通信功能整合到更大的系统中,可能涉及容器化(如Docker)、持续集成/持续部署(CI/CD)流程,以及系统监控工具(如Prometheus、Grafana)的配置。 综上所述,"JAVA程序与...
java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的...
### JAVA程序的基本结构详解 #### 一、Java程序的基本结构 Java是一种广泛使用的面向对象的编程语言,其程序的基本结构通常包含以下元素: 1. **类的定义**:每个Java程序都至少包含一个类(class),类是Java...
Java基本数据类型 Java支持多种基本数据类型,包括整型、浮点型、字符型、布尔型等。每种数据类型都有固定的字节数和取值范围,确保了程序的可移植性和健壮性。 #### 5. Java变量 在Java中,变量是用来存储数据值...
IOC容器的基本概念 IOC的核心思想是“依赖注入”(Dependency Injection,DI)。在传统的编程中,对象A依赖于对象B,通常在A的构造函数或者初始化方法中直接创建B。而在IOC中,A不再直接创建B,而是由外部的IOC...
2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性...
Java是一种广泛使用的面向对象的编程语言,其基本语法是学习Java编程的基础。本文将深入探讨Java的基本语法,包括符号、字符集、标识符、关键字、常量、分隔符、注释、数据类型、变量、数据类型转换以及编程习惯约定...