- 浏览: 237957 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (165)
- Java基础 (49)
- 开发工具 (3)
- Python基础 (1)
- Oracle基础 (9)
- Java 符号计算 (0)
- 计算机基本原理 (10)
- SQL (6)
- javascript (16)
- HTML (2)
- XML (4)
- 程序员之路 (7)
- JDBC (1)
- Unicode (0)
- 字符编码 (3)
- JSP基础 (2)
- Servlet&JSP (9)
- MySQL基础 (1)
- UML基础 (1)
- Hibernate (2)
- Java包 (1)
- Spring (1)
- Struts2 (9)
- 系统命令 (1)
- Tomcat (1)
- Windows (1)
- Android (1)
- C#基础 (14)
- HTML5 (1)
- .NET基础 (1)
- 数据库基础 (2)
- ASP.NET基础 (7)
- 开源Java (3)
- 趣味算法 (1)
- 面向对象思想 (1)
- 软件应用 (1)
- Web工程 (1)
- jquery (2)
- JPA (0)
- 设计模式 (0)
最新评论
-
静夜独窗:
JavaBean组件能说的具体一点吗,我感觉这样说理解的不清晰 ...
EL 表达式语言 -
静夜独窗:
在Java中,不同字符集编码的转换是通过Unicode作为中介 ...
JavaWeb中的乱码产生与解决方案
Java集合类就像容器。把多个对象的引用放进容器中。即集合类主要负责保存,盛装其他数据。因此集合类也被称为容器类。所有集合类都位于java.util包下。
集合类不同于数组,数组元素既可以是基本数据类型也可以是对象。而集合里只能保存对象(实际是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)。
集合必须只有对象,集合中的元素不能是基本数据类型。
Java集合类分为两种
Collection : 一组分立的元素。
Map : 一组“key-value”对。
Java集合类可以用来实现常见的数据结构。
Java集合类大致上可分为Set,List,Map。
Set表示无序,不可重复的集合。
List表示有序,可重复的集合。
Map表示有影射关系的集合。
JDK1.5后引入Queue。Queue代表队列集合的实现。
Collection 接口
Collection接口用于表示任何对象组,该接口定义了作为集合所应该拥有的一些方法。
Collection接口是List,Set,Queue接口的父接口。若要尽可能以常规方式处理一组元素,即使用该接口。
Collection接口里定义了如下操作集合方法 :
1. 添加和移除
boolean add(Object o) :该方法用于向集合里添加一个元素。如果集合对象被添加操作改变了则返回true。
remove(Object o) :删除集合中指定元素o,当集合中包含了一个或多个元素o时,这些元素将被删除,该方法将返回true。
2. 查询操作
isEmpty() :返回集合是否为空。当集合长度为0时返回true,否则返回false。
iterator() :返回一个Iterator对象,用于遍历集合里的元素。
int size() :该方法返回集合里元素的个数。
boolean contains(Object o) :返回集合里是否包含指定元素。
3. 组操作
boolean addAlI(Collection c) :该方法把集合C里的所有元素添加到指定集合里。如果集合对象被添加操作改变了,则返回true。
void clear() :清除集合里的所有元素,将集合长度变为0。
boolean containsAlI(Collection c) :返回集合里是否包含集合C里的所有元素。
boolean removeAlI(Collection c) :从集合中删除集合C里包含的所有元素(相当于用调用该方法的集合减集合C),如果删除了一个或一个以上的元素,该方法返回true。
boolean retainAll(Collection c) :从集合中删除集合C里不包含的元素(相当于取得把调用该方法的集合变成该集合和集合C的交集),如果该操作改变了调用该方法的集合,该方法返回true。
4. 转换数组
Object[] toArray()
Object[] toArray(Object[] a)
该方法把集合转换成一个数组,所有集合元素变成对应的数组元素。
其中第二个方法Object[] toArray(Object[] a) 的参数 a 是集合中所有存放的对象的类的父类。
List接口及其实现类
List接口中方法清单
void add(int index,E element) : 在列表的指定位置插入指定元素。
boolean addAll(int index,Collection<? extends E> c) : 将指定集合中的所有元素插入到集合中的指定位置。
E get(int index) : 返回集合中指定位置的元素。
int indexOf(Object o) : 返回指定对象在集合中第一次出现的索引,从0位置开始,返回-1为不存在该元素。
int lastIndexOf(Object O) : 返回指定对象在集合中最后一次出现的索引位置,返回-1为不存在。
ListIterator<E> listIterator() : 以正确的顺序返回集合中元素的列表迭代器。
ListIterator<E> listIterator(int index) : 以正确的顺序返回集合中元素的列表迭代器,从集合中指定的位置开始。
E remove(int index) : 移除集合中指定位置的元素。
E set(int index,E element) : 用指定元素替换集合中指定位置的元素。
List<E> subList(int fromIndex,int toIndex) : 返回集合中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图。
List接口提供了名称为ListIterator的特殊迭代器。
List在数据结构中分别表现为数组、向量、链表、堆栈、队列等形式。
ArrayList
ArrayList基于数组实现的List。
按元素位置进行索引,查找和修改速度较快,缺点是插入或者删除速度较慢。
在执行插入删除时调用的是System.arraycopy方法,是一个native方法。
Vector的特点、实现机制及使用方法
Vector的特点 :
Vector基于数组实现的List。线程安全。Vector中的所有方法前面都有一个synchronized关键字做修饰。
Stack的特点、实现机制及使用方法
a) Stack的特点 :
Stack : 栈(后进先出),继承Vector类。主要操作有判空、压栈、退栈、取栈顶元素等。
b) Stack的实现机制 :
Stack继承自Vector,同样使用数组保存数据,根据该数据结构的特点进行了限制性操作。JDK中共提供了6个方法用于实现特定要求的操作 :
Stack() : 构造一个空的栈
empty() : 判断栈是否为空
peek() : 查看栈顶元素并返回栈顶对象
pop() : 删除栈顶元素并返回栈顶对象
push(E element) : 将一个元素压入当前栈中
search(Object o) : 查看指定对象是否在当前栈中
Queue
队列
LinkedList
使用双向链表实现的List。链表操作的优点就是插入删除比较快,但是不能按索引直接存取,所以执行更新操作比较快,执行查询操作比较慢。
通常只需知道LinkedList提供了双向队列、栈的功能。
这个类定义的链表也可以像栈或队列一样被使用。
LinkedList实现了许多对first和last元素进行操作的方法,比如set、get、remove等。
虽然LinkedList获取指定位置的元素时较ArrayList按索引获取较慢,但是JDK中对get方法做了优化 :
使用size>>1 == size/2,移位运算要比除法运算效率高的多。
LinkedList和ArrayList的使用方法类似,只是看自己的需要进行选择了。除此之外LinkedList还实现了栈操作的所有方法。
Set接口及其实现类
Set集合中不能添加相同元素。与数学的集合概念类似。若相同则add方法返回false,且新元素不会被加入。
Set判断两个对象是否相同,使用equals方法。
也就是说,如果只要两个对象的equals方法比较返回true,Set就认为两个对象相同。不会接受这两个对象。反之,只要返回false。 Set认为这两个对象不同。把它们当成两个对象处理。
HashSet类
Set接口的实现类。HashSet按Hash算法来存储集合中的元素。因此具有很好的存储查找性能。
HashSet具有以下的特点 :
不能保证元素的排列顺序,顺序有可能发生变化。
HashSet不是线程同步的。
HashSet的元素值可以是null。
HashSet中判断两个对象是否重复。是通过比较hashCode()方法得到hashCode来进行比较的。这与set接口定义的规则有所不同。
LinkedHashSet
继承HashSet类,没有新增实现方法。LinkedHashSet集合根据hashCode值来决定元素的存储。同时使用链表维护元素的顺序(按照元素插入set的顺序保存)。当遍历LinkedHashSet时,访问set的顺序是set中添加元素的顺序。
TreeSet类
TreeSet是SortedSet接口的唯一实现。TreeSet中的元素是有序的,并且元素是不能重复的。
TreeSet中的顺序是根据元素实际值来排序的。
如果使用TreeSet类,则类中的对象必须实现Comparable接口,否则将会出现ClassCastException异常。compareTo(Object obj)方法是Comparable接口定义的方法。大部分Java类实现Comparable接口。
TreeSet会调用元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按升序排列。
EnumSet类
枚举集合类。EnumSet中所欲的值都必须指定枚举类型的枚举值。
EnumSet的元素是有序的,EnumSet以枚举值在Enum类内的定义顺序来决定集合元素的顺序。
EnumSet在内部以向量的形式存储。这种存储形式高效,占用内存小,批量操作效率高。
EnumSet集合不允许加入null元素。如果试图插入null,将抛NullPointerException异常。
说明:
HashSet性能好于TreeSet。当Set需要保存顺序时,使用TreeSet,否则使用HashSet。
HashSet的子类LinkedHashSet,对普通插入,删除操作比HashSet要略慢。遍历比HashSet快。
EnumSet是所有Set实现类中,性能最好。但只能保持同一个枚举类的枚举值作为集合元素。
没有线程安全的Set实现类。
Map接口
Map也被称为字典,或关联数组。Map由一组” key-value”构成。key中包含的对象不能重复。Map像一个小型数据库,通过“key”找到该键对应的“value”。
Map接口的子接口以及主要实现类有:
子接口:Bindings、ConcurrentMap、ConcurrentNavigableMap、MessageContext、LogicMessageContext、NavigableMap、SOAPMessageMap、SortedMap
实现类:AbstractMap, Attributes, AuthProvider, ConcurrentHashMap, EnumMap,ConcurrentSkipListMap,HashMap, Hashtable, IdentityHashMap, LinkedHashMap, PrinterStateReasons,Properties, Provider, RenderingHints, SimpleBindings, TabularDataSupport,TreeMap, UIDefaults,WeakHashMap
Map接口中定义的通用方法:
1. 添加和删除Map中的某个元素
put(K, V) : 将给定的“键-值”对放入到给定的Map当中。
putAll(Map<? extends K, ? extends V) : 将指定的Map中的“键-值”对放入到给定的Map当中。
remove(Object key) : 从该集合中移除指定的对象,并返回对应的value。
clear() : 清空Map中的所有对象。
2. 查询与Map有关的数据
int size() : 返回此Map中“键-值”对的个数。
boolean isEmpty() : 判断此Map中“键-值”对的个数是否为0。
boolean containsKey(Object key) : 测试此Map中是否有该key。
boolean containsValue(Object value) : 测试此Map中是否包含该value。
V get(Object key) : 通过指定的key查询Map中对应的value。
Collection<Object value> values() : 取得Map中所有的value。
Set<Object key> keySet() : 取得当前Map中key的集合。
Set<Entry<K, V>> entrySet() : 取得当前Map中entry的集合。
HashMap
HashMap实现了Map、CloneMap、Serializable三个接口,并且继承自AbstractMap类。
HashMap的实现机制
HashMap基于hash数组实现,若key的hash值相同则使用链表方式进行保存,详见HashSet中的说明。我引用网上一个名词叫“链表散列”来形容这样的数据结构。
Hashtable允许使用null作为key和value。key最多一个为null。
Hashtable
Hashtable是线程安全的Map实现。性能比HashMap低。Hashtable不允许使用null作为key和value。如果试图把null值放进NullPointerException异常。
说明:
HashMap与Hashtable与ArrayList与Vector类似。
SorterMap接口
TreeMap实现类
基于红黑树对TreeMap中所有key进行排序,从而保证TreeMap中所有key-value对处于有序状态。
TreeMap的所有key必须实现Comparable接口。
WeakHashMap
使用方法与HashMap类似。该类中的每个key对象保存了实际对象的弱引用。即当垃圾回收了key所对应的实际对象之后,WeakHashMap会自动删除该key对key-value对。
HashMap的key保存了十几对象的强引用。即只要该HashMap对象不被销毁,该HashMap对象所有key所引用的对象不会被当即回收。
IdentityHashMap实现类
该类通过两个key严格相等(key1==key2)时,IdentityHashMap才认为两个key相等。
HashMap的key通过key之间的对象的equals比较范围true,且hashCode值相等。
允许null作为key和value。不保证key-value对之间的顺序。其顺序可能随时间变化。
EnumMap实现类
该类中所有key都必须是单个枚举类的枚举值。
EnumMap内部已数组形式保存。
EnumMap根据key的自然顺序(枚举值在枚举类中定义顺序)来维护key-value对的顺序。通过遍历keySet,entrySet(),values()等方法来遍历EnumMap时即可看到这种顺序。
EnumMap不允许null作为key值,但允许null作为value。若干使用null作为key将抛出NullPointerException异常。
创建EnumMap时,必须指定一个枚举类。从而将该EnumMap和指导枚举类关联起来。
发表评论
-
Java NIO 基础学习
2013-09-21 16:24 937零、概述 1、传统IO的问题 2、非阻塞IO ... -
try finally 与 return
2013-09-02 16:11 9581、try、catch、finally语句中,在如果try ... -
Java的传值
2013-07-21 13:06 949这个问题一直以来都有误区。本质原因是那些写书的人,喜欢用“传 ... -
Java多线程——synchronized的问题
2013-06-14 15:51 1041一直以来都存在这样的问题: 多线程操作同一对象。该对象有 ... -
Java与操作系统的交互
2013-05-05 22:08 1705System类 System表示Java程序的运行平台。S ... -
java枚举
2013-04-06 15:59 899枚举,之前一直忽视了其存在。其实挺有用。 java5 ... -
Java语法细节
2013-02-03 11:19 924final关键字 final修饰的量以视为常量,当fin ... -
Java Socket 学习笔记
2013-01-29 23:42 955Socket:英文中的意思是插座。 两个Java应用程序 ... -
Java 线程同步
2013-01-27 23:17 1033理解Java线程状态: ... -
Java 与 C# 计算性能比较
2012-11-02 14:51 1159程序:寻找2亿以内的最大素数,从2开始寻找。 Java程序: ... -
Java数组的操作
2012-10-12 11:23 847一、复制数组 java.lang.System类中的静态 ... -
Java日期处理
2013-01-31 23:05 859不得不吐槽一下Java的日期处理。太不爽了。 基本 ... -
java:Excel
2012-09-27 09:06 1122jxl操作excel 在开源世界中,有两套比较有影响的API ... -
关于分页显示的页码
2012-08-21 13:30 1268分页显示数据时常常需要将页码列出来。 此处的Page类主要关 ... -
dom4j
2012-07-07 17:21 2239dom4j 与JDOM一样,也是一种用于解析XML文档 ... -
JDOM基础
2012-07-07 17:20 1943JDOM Java Document Object Mode ... -
线程优先级 && 后台线程 && join线程
2012-07-02 23:08 46线程优先级 每个线 ... -
Java线程的运行状态(线程的生命周期)
2012-07-02 22:56 900新建和就绪 ... -
Java多线程 Thread类 和 Runnable接口
2012-07-02 22:13 1519Java的线程,即一个Thre ... -
Java反射
2012-07-02 20:22 848编译时类型和运行时类型 Java程序中的对象在运行时都会出现 ...
相关推荐
Java容器详细解析 Java容器是一种基本的数据结构,用于存储和管理对象。Java容器主要分为两大类:Collection和Map。 Collection Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Collection接口...
在IT领域,Java容器是一个非常重要的概念,尤其对于软件开发者来说,它们是理解和构建高效、可扩展的应用程序的关键。本文将深入探讨Java容器,并结合标签“源码”和“工具”,从源码层面和实用工具角度来分析这些...
### Java容器学习心得详解 在Java编程中,容器(Containers)是存储和操作对象集合的重要工具,主要包括集合(Collections)和映射(Maps)。本文将深入解析Java容器的关键概念、特性以及不同容器类型的应用场景。 ...
这篇博客"JAVA容器对象整理"可能涵盖了关于Java中的不同容器类、接口以及它们的使用方式。在这里,我们将深入探讨一些核心的Java容器知识点。 1. **ArrayList与LinkedList** - `ArrayList`是一个基于数组实现的...
Java 容器详解 Java 容器是 Java 语言中的一种集合类库,主要包括 Collection 和 Map 两种类型。Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。 Collection Collection 是一种集合接口...
Java容器类是Java编程语言中不可或缺的一部分,它们主要用于存储和管理对象。这些类和接口位于`java.util`包中,为开发者提供了灵活的数据结构和数据操作方式。在Java中,容器类主要分为两大类:Collection和Map。 ...
在Java编程中,容器是用于...总之,理解并掌握这些Java容器的特性和效率差异,能够帮助我们在实际开发中做出更合适的选择,提高程序的性能和可维护性。在具体应用时,还需要结合业务需求和性能测试,才能做出最佳决策。
Java 容器的两种基本类型:Collection 和 Map Collection 和 Map 是 Java 中的两种基本容器类型,它们都可以用来存储和管理对象,但它们有着不同的特点和用途。 Collection 是一种聚集对象的容器,每个位置只能...
Java容器讲解PPT,Collection Map(HashMap TreeMap LinkedHashMap) List (ArrayList LinkedList Vector) Set (HashSet TreeSet LinkedHashSet)
Java容器是Java编程中至关重要的一个部分,它们用于存储、管理和操作对象集合。在这个主题下,我们将深入探讨Java中的核心容器类,包括数组、List、Set和Map,以及它们各自的特点和使用场景。 1. **数组**:数组是...
题目摘要:考虑下列的信息系统。出版社需要记录下列书籍和作者的信息: P1: 每一本书有一个title,一个description和一个ISBN number 还有 出版的日期(包括年/月) P2: 每一本书有1个或多个作者。...
### Java容器起源与JSP容器背景解析 #### 容器技术概述 容器技术在现代IT领域扮演着极其重要的角色,特别是在云计算和微服务架构中。本文将深入探讨容器技术的起源,尤其是针对Java环境中JSP容器的发展历程及其...
对于java容器的一些归纳整理,顺着思维导图能方便自己的理解,提高运用能力
JAVA 容器用法详解,关于JAVA容器的详细讲解
Java容器是Java编程中不可或缺的一部分,它们主要用于存储和管理对象,提供了一种高效且灵活的方式来组织和操作数据。本文将简要介绍Java容器的主要概念、API以及常用的容器类。 首先,Java容器分为两大主要类别:...
Java容器类是Java集合框架的重要组成部分,它们提供了一种存储、管理和操作对象的方式。在Java中,容器类包括数组、列表、队列、集、映射等数据结构,它们为开发者提供了灵活的数据处理能力。本篇文章将深入探讨Java...
Java容器是Java编程中一个非常重要的概念,它主要用于管理和组织对象。在Java中,容器可以是集合、框架或服务提供者等,它们为其他对象提供存储、管理以及生命周期控制等功能。容器广泛应用于企业级开发,尤其是在...
后缀为.mmap的思维导图,总结了JAVA容器的常见类
Java容器是Java编程中至关重要的部分,它们是用于存储、管理和操作对象的工具。Java集合框架,包括List、Set、Map、ArrayList、LinkedList等,构成了Java容器的主要元素。以下是对这些概念的详细解释: 1. **集合...
Java容器学习笔记: 容器概览, 容器中的设计模式, 容器源码分析 - List, 容器源码分析 - Map, 容器源码分析 - 并发容 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...