1.集合类类图

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

├HashSet

├TreeSet

├LinkedHashSet

Map

├Hashtable

├HashMap

├WeakHashMap

└SortedMap

└TreeMap

2.分类介绍

Collection是最基本的集合接口,JDK提供的类都继承自Collection的“子接口”,如List和Set。所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数和有一个Collection参数的构造函数。前者用于创建一个空的Collection,后者用于创建一个新的Collection,允许用户复制一个Collection。不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,可逐一访问Collection中每一个元素。用法如下:

Iterator it = collection.iterator(); //获得一个迭代子    while(it.hasNext()) {

Object obj = it.next(); //得到下一个元素    }

由Collection接口派生的两个接口是List和Set。

1)Collection和Map区别:

Collection类型,每个位置只有一个元素。

Map类型,持有key-value形式的数据——“键值对”,即其元素是成对的对象。

2)Collection子接口List和Set区别:

List是有序的Collection,确保维护元素特定的顺序,这类似于Java的数组。

Set接口不保证维护元素的次序,存入Set的每个元素必须是唯一的。加入Set的Object必须定义equals()方法以确保对象的唯一性。

3)List实现类ArrayList、LinkedList和Vector区别

ArrayList实现了可变大小的数组,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢(类似动态数组)。它允许所有元素,包括null。ArrayList没有同步。如果数组长度一定,用数组效率更高。

LinkedList插入与删除元素开销不大,随机访问相比则相对较慢(类似链表)。可当堆栈、队列和双向队列使用。

Vector是同步的。当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态,这时将抛出ConcurrentModificationException异常,因此必须捕获该异常。比ArrayList慢。

Stack继承自Vector,实现一个后进先出的堆栈。同步的。

4)Set实现类HashSet和TreeSet区别

HashSet为快速查找而设计的Set(采用散列函数)。存入HashSet的对象必须定义hashCode()。 它不保证集合的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null元素。此实现不是同步的。

TreeSet保持次序的Set,底层为红黑树。使用它可以从Set中提取有序的序列。

LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(哈希函数+链表)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。

5)Map实现类Hashtable、HashMap和WeakHashMap

Hashtable是同步的,不允许null。继承于陈旧的Dictionary类的。

HashMap是非同步的,速度比Hashtable快。允许null。HashMap继承于AbstractMap类。内部Hash数组等于Hashtable不同。Map 中插入、删除和定位元素,HashMap 是最好的选择。

WeakHashMap是一种改进的HashMap,若一个key不再被外部所引用,那么该key可以被GC回收。

TreeMap中所有元素都保持固定的顺序,如果需有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。

3 总结

容器对象仅能持有对象引用(对象的指针),而不是将对象信息Copy一根至数列末位置。

在多线程环境下,对于非同步的结合和Map,可以用类似List list = Collections.synchronizedList(new LinkedList(...));或Collections.synchronizedMap(originMap)实现其同步,或者其他手动同步的方法。

Map提供的不是对象与数组的关联,而是对象和对象的关联。

Set只接受不重复的对象。HashSet提供了最快的查询速度。而TreeSet则保持元素有序。LinkedHashSet保持元素的插入顺序。

没必要再在新代码里使用旧类库留下来的Vector,Hashtable和Stack了。

java的集合应用_Java之集合类应用总结相关推荐

  1. java map 集合实例_Java之集合类【HashMap】【入门版,实例解析】

    例子一: import java.util.Map; import java.util.Set; import java.util.HashMap; public class HashMapDemo1 ...

  2. java 数组集合转换_Java 实例 – 集合转数组

    Java 实例 - 集合转数组 以下实例演示了如何使用 Java Util 类的 list.add() 和 list.toArray() 方法将集合转为数组: /* author by w3cscho ...

  3. java 8 集合分组_Java 8:按集合分组

    java 8 集合分组 在继续阅读Venkat Subramaniam的" Java函数式编程 "时,我到达了介绍Stream#collect函数的那部分. 我们想收集一个人,按年 ...

  4. java list集合包含_Java 中的集合类包括 ArrayList 、 Linke

    一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,Ar ...

  5. java 泛型集合应用_Java泛型集合的应用和方法

    展开全部 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以62616964757a686964616fe78988e69d8331333 ...

  6. java+实现集合并运算_JAVA程序设计报告+集合运算

    JAVA程序设计报告+集合运算 JAVA程序设计报告集合的运算(交并差)学生学号专业信息工程(系统工程方向)院系信息与控制学院实习时间三周:指导老师陈金辉目录实验目的试验设计实验源程序程序设计调试不足 ...

  7. java 泛型集合示例_Java 泛型(示例代码)

    1.泛型的由来 我们先看下面这段代码: 报错信息如下: 也就是 集合中第二个数据是 Integer,但是我们取出来的时候将其转换为 String 了,所以报错. 那么这个如何解决呢? ①.我们在遍历的 ...

  8. java线程集合点_Java多线程学习笔记(三) 甚欢篇

    使人有乍交之欢,不若使其无久处之厌 <小窗幽记>很多时候,我们需要的都不是再多一个线程,我们需要的线程是许多个,我们需要让他们配合.同时我们还有一个愿望就是复用线程,就是将线程当做一个工人 ...

  9. java map集合使用_JAVA中Map集合的使用举例

    首先创建一个Emp类,再将几个Emp对象添加到Map集合中. Emp的id作为Map的键,并将id为"005"的对象从集合中删除. package com.han; import ...

最新文章

  1. 【CV】10种轻量级人脸检测算法大PK | 代码集合开源
  2. python编程函数_python编程中函数和参数你必须知道的
  3. jw player flash网页播放器 参数说明以及应用配置
  4. fastjson SerializerFeature详解
  5. 测试用例又双叒叕失败了,NLP帮你
  6. bcc校验位怎么算的_数据BCC校验码计算工具
  7. 那些“不顾一切”要搞开源的人,现在怎样了?
  8. 远程桌面连接的几种方法
  9. 某LINUX平台,管道open直接崩溃
  10. 元数建模工具chiner
  11. ps快捷键大全(表格汇总)
  12. Hyrax: Doubly-efficient zkSNARKs without trusted setup学习笔记
  13. 纳米金13nm|金属纳米粒子/Nano gold制备方法-齐岳生物
  14. Vue组件的抽离和封装
  15. 《关键对话:如何高效能沟通(原书第2版)》 摘录及总结
  16. 【Python鸡兔同笼】
  17. 页面JS方法获取图片中的相对坐标
  18. Main.obj : error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 long __cdecl InitD3D(struct HWND__ *)
  19. 武汉mysql ocp考点_MySQL OCP考试复习系列–开篇:了解MySQL考试
  20. 轩辕实验室 | 车载以太网CNN入侵检测算法

热门文章

  1. ABP vNext中使用开源日志面板 LogDashboard
  2. [功能发布]Excel催化剂地图可视化功能正式发布,欢迎使用!
  3. 重磅!微软发布 Visual Studio Online:Web 版 VS Code + 云开发环境
  4. 深入研究.NET Core的本地化机制
  5. 开源基于Canal的开源增量数据订阅消费中间件
  6. Xamarin中国峰会2019
  7. AWS vs K8s 是新的 Windows vs Linux
  8. 程序员修神之路--高并发优雅的做限流(有福利)
  9. 如何在你的项目中集成 CAP【手把手视频教程】
  10. .NET MVC CSRF/XSRF 漏洞