原作者滴着:http://www.cnblogs.com/eflylab/archive/2007/01/20/625237.html

Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes)。集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题。 
1 Collection 和 Collections的区别。 
2 List, Set, Map是否继承自Collection接口。 
3 ArrayList和Vector的区别。 
4 HashMap和Hashtable的区别。

篇尾有答案,我们开始正题。

集合Collection接口  

--Collection 是任何对象组,元素各自独立,通常拥有相同的套用规则。Set List由它派生。

基本操作  增加元素add(Object obj); addAll(Collection c);

删除元素 remove(Object obj); removeAll(Collection c);

求交集 retainAll(Collection c);

删除元素 remove(Object obj); removeAll(Collection c);

求交集 retainAll(Collection c);

访问/遍历集合元素的好办法是使用Iterator接口(迭代器用于取代Enumeration)

Public interface Iterator{ 

    Public Boolean hasNext(}; 

    Public Object next(}; 

    Public void remove(}; 

}  

集set 
--没有重复项目的集合

有三种特定类型的集可用

HashSet-基于散列表的集,加进散列表的元素要实现hashCode()方法

LinkedHashSet-对集迭代时,按增加顺序返回元素

TreeSet-基于(平衡)树的数据结构

清单List

--位置性集合。加进清单的元素可以加在清单中特定位置或加到末尾

有两个特定版本

ArrayList(数组表)-类似于Vector,都用于缩放数组维护集合。区别:

一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

LinkedList(链表)-是双向链表,每个节点都有两个指针指向上一节点和下一节点。

用在FIFO,用addList()加入元素 removeFirst()删除元素
用在FILO,用addFirst()/removeLast()

ListIterator提供双向遍历next() previous(),可删除、替换、增加元素

映射表Map

--用于关键字/数值对,像个Dictionary

处理Map的三种集合

关键字集KeySet()

数值集value()

项目集enrySet()

四个具体版本

HashMap-散列表的通用映射表

LinkedHashMap-扩展HashMap,对返回集合迭代时,维护插入顺序

WeakHashMap-基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它

TreeMap-基于平衡树的映射表

HashMap-散列表的通用映射表

LinkedHashMap-扩展HashMap,对返回集合迭代时,维护插入顺序

WeakHashMap-基于弱引用散列表的映射表,如果不保持映射表外的关键字的引用,则内存回收程序会回收它

TreeMap-基于平衡树的映射表  
Collections类,用于同步集合,还能改变集合只读方式的类 
e.g.:

Map mp=new HashMap();

mp=Collections.synchronizedMap(mp); //生成线程安全的映射表 

mp=Collections.unmodifiableMap(mp); //生成只读映射表 

Comparable 自然顺序的排序类 Comparator 面向树的集合排序类

容器分类学(Container taxonomy)

集合接口: Collection List Set;Map Iterator ListIterator。

抽象类: AbstractCollection AbstractList AbstractSet AbstractMap AbstractSequentiaList。

老版本中的集合类型

Vector类

Vector,就是向量。一种异构的混合体,可以动态增加容量。对它的操作简要如下

比如我们有一个Vector: Vector myVec=new Vector(a_Array.length)

取得vector的长度:myVec.size();

赋值:set(int position,Object obj) / setElementAt(Object obj, int position) –不支持动态增长

add(Object obj )/ addElement(Object obj) 在Vector末尾加入对象

e.g.:myVec.add(new a_Array[0]);

取出元素:get(int position) / getElement(int position)

Stack类

是Vector的子类。就是数据结构里讲滥了的堆栈(这个词可简称栈,不要混淆于heap-堆)。后进先出的存取方式。

Stack()构造空栈

Empty()叛空

Search()检查堆栈是否有元素

Peek()取得栈顶元素

Pop()弹栈

Push()入栈

Enumeration接口

Dictionary类

字典。关键字/数值方式存取数据,如果映射没有此关键字,取回null。

Hashtable类

是Dictionary结构的具体实现。

面试题答案

Collection 和 Collections的区别。

Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。  

Collection是个java.util下的接口,它是各种集合结构的父接口

List, Set, Map是否继承自Collection接口? List,Set是 Map不是

ArrayList和Vector的区别。 
一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 
二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

HashMap和Hashtable的区别  
一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现 

二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 

三.值:只有HashMap可以让你将空值作为一个表的条目的key或value 

浅谈JAVA集合框架(转载)_常用的Vector和HashMap的更多相关文章

  1. 浅谈JAVA集合框架

    浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...

  2. 浅谈 Java集合

    Java 集合 集合是对象的容器,定义了多个对象进行操作的常用方法,可实现数组的功能. Java集合类库所处位置:java.util.*. 与现代的数据结构类库的常见做法一样,Java集合类库也将接口 ...

  3. 浅谈Java三大框架与应用

    前言:对于一个程序员来说,尤其是在java web端开发的程序员,三大框架:Struts+Hibernate+Spring是必须要掌握熟透的,因此,下面谈谈java三大框架的基本概念和原理. JAVA ...

  4. 浅谈Java集合体系及底层实现原理

    集合加载因子 https://blog.csdn.net/qq_34627002/article/details/79769261 底层原理: https://blog.csdn.net/qq_258 ...

  5. 【Java】浅谈Java内部类(转载)

    说得挺细的,不是泛泛而谈.https://blog.csdn.net/weixin_42762133/article/details/82890555

  6. Java集合框架(Collection Framework)学习之 HashMap

    从API文档可以得到HashMap的以下几个特点: 基于哈希表(hash table)实现,并且是链式哈希表 允许空值和空键(null=null 键值对) HashMap与Hashtable基本相同, ...

  7. 第10讲-Java集合框架

    第10讲 Java集合框架 1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1 List 1.2.2 Set 1.2.3 Map 2.具体内容 2.1.Java集合框架 2.1.1 为什么需要 ...

  8. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

  9. 浅谈java类集框架和数据结构(2)

    继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主 ...

随机推荐

  1. Hadoop概念学习系列之谈谈RPC(三十三)

    RPC-------->远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数 ...

  2. 松下蓄电池与UPS使用和维护

      使用条件及环境1.充电电流(浮充使用):0.15CA以下2.放电电流范围:0.05CA-3CA3.环境温度:0℃-40℃ (适宜的温度是25℃) 4.充电电压:(12V电池推荐值)   周围温度 ...

  3. hdoj 2091 空心三角形

    空心三角形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. [OC Foundation框架 - 15] NSDate

    日期处理类 定义 时间间隔计算 时间比较,返回其一 时间格式化 void dateCreate() { //date return current time NSDate *date = [NSDat ...

  5. 转载Entity Framework 4.1 DbContext使用记之三——如何玩转实体的属性值?

    Entity Framework 4.1 DbContext使用记之一——如何查找实体? DbSet.Find函数的使用与实现 Entity Framework 4.1 DbContext使用记之二— ...

  6. 28个你必须知道的HTML5的新特性,技巧以及技术

    原文地址:http://adamlu.com/?p=584#header 总结一下: 1. 新的Doctype 尽管使用<!DOCTYPE html>,即使浏览器不懂这句话也会按照标准模式 ...

  7. 编写Qt Designer自定义控件(二)——编写自定义控件界面

    接上文:编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件 既然是控件,就应该有界面,默认生成的控件类只是一个继承了QWidget的类,如下: #ifndef LOGLATED ...

  8. web开发工具类

    1.日期工具类 import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { public sta ...

  9. MSSQLSERVER数据库- 数据类型Timestamp

    Timestamp:亦称时间戳数据类型,它提供数据库范围内的惟一值,反应数据库中数据修改的相对顺序,相当于一个单调上升的计数器.当它所定义的列在更新或者插入数据行时,此列的值会被自动更新,一个计数值将 ...

  10. HTTP 与 HTTPS 的区别

    本文转自:http://www.cnblogs.com/ok-lanyan/archive/2012/07/14/2591204.html HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的 ...