Collection接口
Collection是最基本的集合接口,由Collection派生出List和Set接口,通过iterator迭代器遍历集合中的对象。
List接口
List是有序的集合,可以有相同的元素,实现List的接口有LinkedList,ArrayList,Vector。
LinkedList类可以被用作堆栈、队列或双向列表,LinkedList没有同步方法,可以包含null。如果多个线程同时访问一个List,则必须自己实现访问同步。解决方法是在创建List时构造一个同步的List:List list = Collections.synchronizedList(new LinkedList(...));
ArrayList类实现了可变大小的数组,允许包含null,不同步。ArrayList实例的容量会随着不断增加元素而自动增加,可以调用ensureCapacity方法来增加容量。
Vector类是同步的,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因为必须捕获该异常。
Set接口
Set是不包含重复元素的集合对象,Set最多有一个null元素。无序的。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。
Map接口
Map中不能包含相同的key,每个key只能映射一个value。
HashTable类实现了接口Map,任何非空的对象都可以作为key或value。由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object,如果你用自定义的类当作key的话,要相当小心,按照散列函数的定义,如果两个相同的对象,即obj1.equals(obj2)==true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同。如果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希表的操作。所以hashCode()方法和equals方法必须同时重写。HashTable是同步的。
HashMap类是非同步的,并且key和value都允许为空。
总结
如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
分享到:
相关推荐
以上只是Java面向对象编程的基础知识点,实际开发中,还需要掌握更多的高级特性和设计模式,如泛型、集合框架、异常处理、并发编程、IO流、网络编程等,这些都是成为一名熟练Java开发者不可或缺的部分。学习Java面向...
Java集合框架包括List、Set和Queue接口,以及ArrayList、LinkedList、HashSet、 TreeSet、HashMap、TreeMap等实现类。集合用于存储一组不重复的对象,而Map则关联键值对,提供高效的查找和访问。例如,HashMap以散列...
Java集合框架提供了多种数据结构供选择,根据实际需求可以选择适当的数据结构。同时,为了保持数据的一致性,可能需要在“一”端添加删除操作时同步更新“多”端的集合。 3. **对象的多对多关系**: 多对多关系...
【程序员面试准备】系列主要涵盖了六个关键领域,包括面向对象编程、C++基础知识、数据结构、Java语言、内存管理和指针。这些知识点是任何IT专业人员,尤其是面试时需要掌握的核心概念。 首先,面向对象编程(OOP)...
6. **集合框架**:Java集合框架是处理对象集合的一组接口和类,如ArrayList、LinkedList、HashSet、HashMap等,以及接口List、Set、Map。 7. **输入/输出流**:Java的I/O流系统用于读写文件和网络通信,包括文件流...
标题中的"protoc.exe和protobuf-java-3.6.1集合"指的是Google开源的Protocol Buffers(简称protobuf)工具的两个关键组件。protobuf是一种高效的数据序列化协议,它允许开发者定义数据结构,然后生成能够在各种编程...
- `java.util`包中的ArrayList, LinkedList, HashMap等是常用的集合类,提供了存储和操作对象的方法。 - 集合框架包括List, Set, Queue, Map等接口,以及它们的实现类。 7. **多线程**: - Java内置对多线程的...
Java面试题-基础+集合原理 本资源主要涵盖Java面试题的基础知识和集合原理,涵盖Object-Oriented Programming(OOP)相关知识点,包括多态(Polymorphism)、方法Overload和Override、等于运算符(==)和equals()...
### JAVA数据结构与基础知识详解 #### 一、Java与面向对象程序设计 Java是一种广泛使用的高级编程语言,其核心特点之一就是支持面向对象编程(OOP)。面向对象编程通过将数据和行为封装在对象中来简化软件开发和...
15. **集合框架**:Java集合框架提供了多种数据结构,如ArrayList、LinkedList、HashSet、HashMap等,用于存储和操作对象。 16. **输入输出流**:Java的I/O流处理涉及文件读写、网络通信等,如FileInputStream、...
这份复习笔记将涵盖Java的基础知识,包括语法、数据类型、控制结构、类与对象、异常处理、输入/输出以及集合框架等核心概念。 1. **Java语法** Java的语法基于C++,但简化了一些复杂的特性。例如,Java没有指针,...
- **组织数据**:在类的内部,对数据进行有效的组织,使得数据结构更加清晰合理。 - **高效检索**:支持简单而快速地搜索大量条目的功能,这对于处理大数据量的应用尤为重要。 - **动态插入与删除**:部分集合提供了...
本教程的"Java实例 - 集合输出源代码+详细指导教程.zip"旨在帮助开发者深入理解Java集合框架,并通过实例源代码进行实践学习。 集合框架包括接口、类和算法,主要由以下部分组成: 1. **接口**:这些是集合的抽象...
字符串、数组和集合部分是Java编程中的重要数据结构。在这一部分中,书中对字符串的处理、数组的创建和使用、以及ArrayList和LinkedList类的使用都进行了详细的讨论,包括如何通过集合框架进行批量数据操作。 在...
在Java中,这可能涉及到数据结构如数组或集合,以及面向对象编程中的类和方法,用于计算、存储和展示分数。 3. **GoldenCoin.java**:可能是一个涉及黄金硬币的示例,可能涵盖了类的设计,属性(如硬币的数量、重量...
- **HashMap**:存储键值对的数据结构,通过键的哈希值快速定位值,提供O(1)的平均时间复杂度。 了解并熟练掌握这些Java基础知识,对于进行日常开发工作至关重要。通过不断练习和应用,你可以构建出更加高效和可靠...
Java 的特点之一就是面向对象,是程序设计方法的一种...对于数据结构的改变需要和代码进行通信然后操作,反之亦然。面向对象设计让大 型软件工程的计划和设计变得更容易管理,能增强工程的健康度,减少失败工程的数量。
- Java集合框架提供了各种数据结构,如ArrayList、LinkedList、HashSet、HashMap等,用于存储和操作对象。 - **泛型**:在集合类中使用泛型可以限制元素类型,提高代码安全性。 5. **输入/输出流** - Java的I/O...
这些文件《数据结构与算法分析—C语言描述.pdf》、《数据结构与算法分析.pdf》、《数据结构与算法JavaScript描述.pdf》和《数据结构与算法].pdf》很可能详细介绍了以上概念,并提供了具体的实现和实例,帮助读者深入...
1. **数组**:是最基础的数据结构,提供了随机访问和快速查找的能力,但插入和删除操作通常效率较低。 2. **链表**:在不连续的内存空间中存储元素,插入和删除操作快速,但访问速度较慢,因为需要遍历链接。 3. **...