原作者滴着: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. ST-Link 驱动安装

    电脑中可以预先安装一个ST Visual Programmer 这个直接带STLink驱动或是安装一个STM32 ST-Link Uitilty 然后选择自安安装 点出下一步 在弹出的对话框选择“仍然 ...

  2. Ms SQL Server 约束和规则

    一.SQL约束 约束定义关于列中允许值的规则,是强制完整性的标准机制. 使用约束优先于使用触发器.规则和默认值.查询优化器也使用约束定义生成高性能的查询执行计划. 1:类型 约束的类型一共分三种 域约 ...

  3. Oracle中的AS和IS

    Oracle中的AS和IS是ORACLE为了方便而设置的同义词基本上没有不同 . 使用规则: 1.在创建存储过程(PROCEDURE)/函数(FUNCTION),以及自定义类型(TPYE)和包(PAC ...

  4. 修改hosts文件(判断是否为管理员/以管理员权限运行脚本)

    将以下命令保存为 HostsModify.ps1,然后执行即可 #该脚本用来添加hosts解析记录.脚本在执行的时候会判断当前用户是否为管理员,如果不是则弹出提示框口,要求输入相应密码 If (-NO ...

  5. 多边形背景生成工具推荐-Trianglify

    前端开发whqet,csdn,王海庆,whqet,前端开发专家 low poly低多边形(相似于折纸的效果),多边形风格的设计应用越来越多,今天我们就来看一个利用d3.js写成的生成器Triangli ...

  6. BZOJ 1934: [Shoi2007]Vote 善意的投票 最小割

    1934: [Shoi2007]Vote 善意的投票 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...

  7. [MODx] 7. MIGX DB

    MODx provides a really unfriendly way to work with xPDO class. What I means is you need to define XM ...

  8. UVA - 10883 Supermean

    Description Problem F Supermean Time Limit: 2 second "I have not failed. I've just found 10,000 ...

  9. IBM Rational ClearCase 部署指南

    引言 随着时间的推移,可视化设计与软件配置管理(SCM)已经逐渐成为现代软件项目成功的关键因素.IBM Rational 是 IBM Rational XDE 和 IBM Rational Clear ...

  10. java_spring_bean的作用域_实例是否为单实例

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...