- 浏览: 190270 次
- 性别:
- 来自: 上海
文章分类
最新评论
List特点:元素有放入顺序,元素可重复
Map特点:元素按键值对存储,无放入顺序
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
List接口有三个实现类:LinkedList,ArrayList,Vector
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低
Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet
SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)
Query接口有一个实现类:LinkList Map接口有三个实现类:HashMap,HashTable,LinkeHashMap HashMap非线程安全,高效,支持null;
HashTable线程安全,低效,不支持null
SortedMap有一个实现类:TreeMap其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对
List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.
List的功能方法
实际上有两种List: 一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。
List : 次序是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可以当作堆栈、队列和双向队列使用。
Set的功能方法
Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)
Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
TreeSet : 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
Map的功能方法
方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。
执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。
HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。
Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”
HashMap : Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。
LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。
TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
WeakHashMao : 弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。
IdentifyHashMap : 使用==代替equals()对“键”作比较的hash map。专为解决特殊问题而设计。
相关文章
Map特点:元素按键值对存储,无放入顺序
Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)
List接口有三个实现类:LinkedList,ArrayList,Vector
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低
Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet
SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)
Query接口有一个实现类:LinkList Map接口有三个实现类:HashMap,HashTable,LinkeHashMap HashMap非线程安全,高效,支持null;
HashTable线程安全,低效,不支持null
SortedMap有一个实现类:TreeMap其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对
List按对象进入的顺序保存对象,不做排序或编辑操作。Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于"键"的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用 LinkedHashSet或者LinkedHashMap.
List的功能方法
实际上有两种List: 一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。
List : 次序是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可以当作堆栈、队列和双向队列使用。
Set的功能方法
Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)
Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
HashSet : 为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。
TreeSet : 保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
LinkedHashSet : 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
Map的功能方法
方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。
执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。
HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。
Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”
HashMap : Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。
LinkedHashMap : 类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。
TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
WeakHashMao : 弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。
IdentifyHashMap : 使用==代替equals()对“键”作比较的hash map。专为解决特殊问题而设计。
相关文章
发表评论
文章已被作者锁定,不允许评论。
-
ReentrantLock与Condition
2017-03-17 14:25 532多线程和并发性并不是什么新内容,但是 Java 语言设计中的创 ... -
java linux监控
2017-03-13 17:49 502http://agapple.iteye.com/blog/1 ... -
transient和volatile两个关键字
2017-02-16 09:47 576transient和volatile两个关 ... -
java 锁机制
2016-12-09 13:43 481一段synchronized的代码被 ... -
java 正则表达式
2016-12-02 10:28 523众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字 ... -
java ClassNotFoundException和NoClassDefFoundException的差别
2016-08-17 19:47 913首先从名字上可以看出一类是异常,一类属于错误。异常可以通过异常 ... -
ThreadLocal
2016-07-19 11:10 335ThreadLocal是什么 Thre ... -
java CAS
2016-07-10 14:55 348cas 乐观锁每次不锁定整个线程,在操作之前进行判断。悲观锁独 ... -
concurrenthashmap
2016-07-10 11:11 426hash table虽然性能上不如 ... -
java 线程池的使用
2016-07-10 09:52 3771. 引言 合理利用线程池能够带来三个好处。第一:降低资源消 ... -
java.util.concurrent
2016-07-03 16:24 413我们都知道,在JDK1.5之 ... -
JVM 配置 以及垃圾收集器的选择
2016-04-15 12:36 735JVM监控的关键指标说明: a) FGC的环比增加次数。Zab ... -
jvm实时监控工具
2016-04-09 09:35 472 -
哈希 、一致性哈希、余数式哈希
2016-04-07 16:10 869什么是Hash Hash,一 ... -
jvm dump 相关
2016-03-22 17:22 685http://www.cnblogs.com/edwardla ... -
深入剖析volatile关键字
2016-03-21 16:02 552深入剖析volatile关键字 ... -
java线程安全问题之静态变量、实例变量、局部变量
2016-03-08 12:52 578java多线程编程中,存在很多线程安全问题,至于什么是线程安全 ... -
有状态的bean和无状态的bean的区别
2016-03-08 11:23 1527有状态会话bean :每个用户有自己特有的一个实例,在用户的生 ... -
Java nio详解
2016-01-20 16:30 557http://www.ibm.com/developerwor ... -
java 不定长数组
2015-11-24 15:00 795在调用某个方法时,若是方法的参数个数事先无法确定该如何处理 ...
相关推荐
Java 集合概览小结 ...Java 集合概览提供了多种类和接口来帮助我们存储和管理对象集合,包括 Collection 和 Map 两大类,每种类都有其特点和使用场景,对于不同的应用场景选择合适的集合类非常重要。
- **集合接口**:Java集合框架中有六种主要的集合接口,它们分别是`Collection`、`List`、`Set`、`Queue`、`Deque`和`Map`。这些接口构成了整个集合框架的基础,定义了集合类应该具备的基本行为和功能。 - `...
本文旨在为读者提供关于Java集合框架的概览性介绍,帮助理解其整体架构与设计理念。对于希望深入掌握特定接口或类使用方法的学习者,建议查阅官方提供的Java API文档。 #### 一、概述 数据结构在软件开发中扮演着...
#### 一、Java集合框架概览 Java集合框架是Java标准库的一个核心组成部分,用于处理各种数据结构如列表、集合和映射等。该框架提供了一组统一的接口和实现,使开发人员能够高效地管理和操作数据。整个集合框架可以...
#### Java集合框架概览 Java集合框架是Java标准库的一个核心组成部分,它为开发人员提供了多种用于存储和操作数据的方式。这些集合类和接口的设计旨在满足不同的需求,并提供了高效的数据管理和操作手段。Java集合...
#### 一、Java集合框架概览 在Java编程语言中,集合框架(Collection Framework)是一组接口和实现这些接口的类的集合,它提供了存储和操作一组对象的方式。Java集合框架主要包括两种类型的容器:集合(Collection...
### Map接口详解 #### 1. Map接口概览 ...通过以上对`Map`、`Set`、`Iterator`以及Java集合框架的详细介绍,我们不仅可以了解到这些接口和类的基本概念和使用方法,还能深入理解它们在实际编程中的应用价值。
JAVA集合框架主要由`Collection`接口及其子接口`List`和`Set`构成。`List`保持元素的插入顺序,允许重复元素;而`Set`不允许重复元素,且元素无固定顺序。`Map`接口用于存储键值对,其中键必须唯一。 #### List接口...
### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...
1. **集合接口**:主要包括`Collection`、`Set`、`List`、`Map`等。 2. **抽象类**:如`AbstractCollection`、`AbstractList`、`AbstractSet`等,它们实现了部分接口方法,以便于我们自定义集合类时不必重写所有方法...
1. **灵活性**:集合框架支持多种数据结构,包括但不限于List(有序且允许重复)、Set(无序且不允许重复)、Map(键值对存储)等,满足不同场景下的数据存储需求。 2. **高效性**:内置的集合类通常经过优化,提供...
#### 一、Java集合框架概览 Java集合框架是一个高度抽象化的数据结构模型,它提供了一系列标准的接口、抽象类以及具体的实现类来帮助开发者高效地管理和操作各种对象集合。这一框架是Java 2平台的重要组成部分之一...
Collections是Java集合框架的一个静态工具类,提供了一系列操作集合的便利方法,如排序、查找、填充、翻转等。例如: 1. sort(List<T> list):对指定列表进行升序排序。 2. binarySearch(List...
#### 一、Java集合框架概览 Java集合框架是一组用于存储和操作数据的API,提供了多种数据结构和算法来帮助开发者高效地管理和处理数据。集合框架主要包括`Collection`和`Map`两个顶层接口,以及它们的子接口和实现...
- **集合接口**:主要包括`Collection`、`Set`、`List`和`Map`等。这些接口定义了集合的基本行为和操作,是集合框架的核心。 - **抽象类**:如`AbstractCollection`、`AbstractList`等,它们实现了集合接口的一些...
Java集合框架主要包括三种主要类型的容器:`List`、`Set` 和 `Map`,以及一些辅助接口和类。这些容器提供了存储和操作对象的不同方式,能够满足各种不同的需求。 ##### 1. List `List` 是一个有序的容器,可以重复...
#### 一、Java集合框架概览 Java集合框架是一个用于存储和操作对象集合的标准API。该框架提供了多种容器类型,包括`Collection`和`Map`两大类。 - **Collection**:这是一个接口,表示一组对象的集合。`Collection...
### Java集合概述 Java集合框架提供了多种用于存储和操作数据的接口与类。这些集合类主要分为两大类:`Collection` 和 `Map`。 #### Collection `Collection` 是一组对象的容器,它允许我们对这些对象执行一些通用...
这是因为Java标准库中大多数集合类默认不是线程安全的,如`HashSet`、`ArrayList`、`LinkedList`和`HashMap`等。 #### 解决方案 针对集合类的同步问题,有多种解决策略: 1. **使用`synchronized`同步块** - **...