1)Collection
Collection是最基本的集合接口,一个Collection代表一组Object,Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
2)List
以元素插入的次序来放置元素,不会重新排列。
3)Set
不接爱重复元素,它会使用自己内部的一个排列机制。
4)Map
一群成对的key-value对象,即所持有的是key-value pairs。Map中不能有重复的key,它拥有自己的内部排列机制.
5)Vector
非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例 如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。
Java容器类类库的用途是“保存对象”,它分为两类:
Collection----一组独立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而Set不能有重复元素。
Map----一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。
1.迭代器
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动:
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
2.List的功能方法
List(interface)
次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。
ArrayList
由数组实现的List。它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这比LinkedList开销要大很多。
LinkedList
对顺序访问进行了优化,向List中间插入与删除的开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。
3.Set的功能方法
Set(interface)
存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
HashSet
为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。
TreeSet
保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet
具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
HashSet采用散列函数对元素进行排序,这是专门为快速查询而设计的;TreeSet采用红黑树的数据结构进行排序元素;LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。
测试程序
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListTest {
public static void main(String args[]){
List lists = new ArrayList();
for(Long i=0l;i<1000000l;i++){
lists.add(i);
}
Long oneOk = oneMethod(lists);
Long twoOk = twoMethod(lists);
Long threeOk = threeMethod(lists);
Long fourOk = fourMethod(lists);
System.out.println("One:" + oneOk);
System.out.println("Two:" + twoOk);
System.out.println("Three:" + threeOk);
System.out.println("four:" + fourOk);
}
public static Long oneMethod(Listlists){
Long timeStart = System.currentTimeMillis();
for(int i=0;i System.out.println(lists.get(i));
}
Long timeStop = System.currentTimeMillis();
return timeStop -timeStart ;
}
public static Long twoMethod(Listlists){
Long timeStart = System.currentTimeMillis();
for(Long string : lists) {
System.out.println(string);
}
Long timeStop = System.currentTimeMillis();
return timeStop -timeStart ;
}
public static Long threeMethod(Listlists){
Long timeStart = System.currentTimeMillis();
Iterator it = lists.iterator();
while (it.hasNext())
{
System.out.println(it.next());
}
Long timeStop = System.currentTimeMillis();
return timeStop -timeStart ;
}
public static Long fourMethod(Listlists){
Long timeStart = System.currentTimeMillis();
for(Iterator i = lists.iterator(); i.hasNext();) {
System.out.println(i.next());
}
Long timeStop = System.currentTimeMillis();
return timeStop -timeStart ;
}
}
测试结果
One:14109 Two:14000 Three:15141 four:14297
相关推荐
通过这些练习,你将巩固对Java容器的理解,提高代码编写效率,并为解决实际问题打下坚实基础。记得在实践中不断挑战自己,尝试不同的场景和数据结构,以便更好地掌握Java容器的精髓。祝你在学习过程中取得优异的成绩...
这些知识点仅仅是Java容器对象的一部分,实际的博客可能会包含更多细节,如源码分析、性能对比和最佳实践。通过阅读博客中的`持有对象.xmind`文件,可以进一步了解博主对这些概念的详细整理和分类。如果你对Java容器...
在Java编程语言中,容器类是程序开发中不可或缺的一部分,它们用于存储和管理对象。ArrayList是Java集合框架中的一种重要容器,它以数组为基础实现,提供了动态数组的功能。本篇文章将深入探讨ArrayList的工作原理,...
### Java集合排序及Java集合类详解 #### 一、集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构...
- **Java**:Java 中的容器类如 `ArrayList`、`LinkedList` 和 `HashMap` 等,被设计为类型安全且易于使用的。Java 的集合框架提供了高度抽象的数据结构,这使得编写代码更加简洁,但可能会带来一定的性能开销。 - *...
同时,两者在数据结构实现上也有区别,如链表、树、图等,C通常需要手动管理指针,而Java则通过内置的容器类如ArrayList和LinkedList实现。 总之,学习和掌握这些Java常见程序的算法对于提升编程技能至关重要。无论...
- 在Java中,`java.lang.Thread`、`java.lang.Number`和`java.lang.ClassLoader`是可以被继承的类,而`java.lang.Double`、`java.lang.Math`、`java.lang.Void`以及`java.lang.Class`是不可被继承的,因为它们要么...
Java集合框架是Java编程语言中一个至关重要的组成部分,它为开发者提供了存储和操作对象...此外,了解Java集合框架的高级特性,如并发容器、流API以及Collections工具类,对于提升开发效率和代码质量都有着显著的作用。
本文将深入探讨如何比较两个集合,并关注在Java中使用List进行对比时的“新增”、“编辑”和“删除”操作。首先,我们需要理解集合的基本概念。集合是存储一组元素的数据结构,而List是一种有序的集合,允许重复元素...
本章还提到了如何通过创建类来组织代码,并引入了容器类的概念,它们用于存储和操作数据。有序数组的二分查找提高了查找效率,但插入和删除操作较慢。此外,介绍了大O表示法,用于描述算法的时间复杂度,例如线性...
Java程序员可以直接使用这些预定义的类和接口,无需深入了解底层数据结构和算法的实现细节,从而极大地提高了开发效率。 #### 二、集合框架的层次结构 **1. 集合接口 (Collection)** - **Set 子接口**: 表示不...
在Java编程中,集合框架提供了多种容器类型来满足不同场景下的需求。其中,`List` 和 `Set` 是最常用的两种集合接口。下面将详细介绍它们的区别及应用场景。 **1.1 List与Set的基础对比** - **List**:有序、允许...
在Java中,封装通过访问控制修饰符(`private`, `protected`, `public`)实现,`private`确保只有类内部可以访问特定成员,`protected`允许同一包内及子类访问,而`public`则允许全局访问。封装有助于提高代码的安全性...
【Java 容器详解】 Java 容器是 Java 核心库的重要组成部分,它们提供了存储和管理对象的方式。常见的容器包括以下几类: 1. **集合接口**:主要有 Collection 和 Map 两大接口。 - **Collection**:代表一组不...
- Java中字符串(String)是一个不可变的对象,可以使用String类的各种方法进行字符串操作,如concat()、equals()、substring()等。 - **1.1.4 数组** - 数组是一种基本的数据结构,用于存储相同类型的元素。Java...
Java API是Java编程语言的核心组成部分,它包含了各种预定义的类和接口,为开发者提供了丰富的功能,便于构建复杂的软件系统。本资源包含Java API的1.5和1.6两个版本的中文文档,有助于深入理解和对比这两个版本之间...
- 迭代器提供了一种遍历集合中元素的方式,它支持在容器上进行迭代操作,而无需暴露容器内部的结构。 #### 栈与队列 - **栈** - 栈是一种只能在一端进行插入和删除操作的线性表。通常遵循先进后出(FILO)的原则...
敏感词过滤,又称为关键词屏蔽,是通过对比一个预先定义的敏感词库,检查文本中是否存在这些敏感词汇,如果发现则进行替换、删除或标记处理。这个过程通常涉及字符串匹配算法,例如朴素贝叶斯、Boyer-Moore算法、Aho...
- 类加载与卸载:分析类加载过程及类的生命周期。 11. **Spring框架** - AOP:理解面向切面编程的概念和实现。 - IoC容器:掌握Bean的生命周期和依赖注入。 - Spring Boot与Spring Cloud:简述这两个框架在...