1.集合类和容器类的继承关系图:

说明:上图来自互联网,如有侵权,请告之,我将注明原始作者或删除该图。

上图只列出了图中类的一些主要继承和实现关系,并不精确,只表示了大概的关系,有些父接口并没有在图中画出,以及有写继承关系跨过了中间的某些类,图中让它直接继承了间接父类。

2.对各个集合类的一些说明:

1.Collection是集合的父类,但是JDK不提供直接继承自Collection的集合类让用户使用,而是提供继承自Collection子接口List和Set的集合类让用户使用。

2.List和Set的区别,List提供了随机访问的方法,内部元素是有序的,并且允许为空;而实现Set接口的类,内部元素是无序的,并且最多只能有一个null元素,并且放入Set中的元素必须不相等,就是要满足e1.equals(e2)==false,另外必须小心操作可变对象,当Set中的可变对象被操作后使得Set中有两个元素满足了e1.equals(e2)==true时就会发生一些问题。

3.ArrayList类。ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

4.LikedList。它内部的结构是基于链表的。LinkedList实现了List接口,允许null元素。此外LinkedList实现了Deque<E>, Queue<E>接口,提供额外的get,remove,insert方法在LinkedList的首部或尾部。所以LinkedList可以用来实现队列操作。它也是非同步的。

5.Vector。它与ArrayList非常相似,但是Vector是同步的。

6.HashSet。它内部是使用Hash表来存放元素的,通过HashMap来实现的。元素是无序的。

7.TreeSet。它内部结构是基于红黑树的,内部元素是有序的。插入、删除等操作是

3.对各个容器类的一些说明:

1.容器的父接口是Map,它提供了键值对的数据结构。

2.HashMap。跟HashSet相似,它也是基于Hash函数的,所以作为HashMap的键值的类,必须重写hash和equals方法。它是非同步的,允许null的key和null的value。

3.Hashtable。它也是实现Map的一个子类,它跟HashMap非常相似,但是Hashtable是同步的,并且不允许有null的key和null的value。

4.TreeMap。内部结构是基于红黑树的,内部的键值集合是有序的,可以进行基于有序的相关操作,其他操作跟HashMap相似。

5.WeakHashMap。该类与HashMap相似,只是它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

4.Collections类:

1.这是一个工具类,它的静态方法一般用来处理集合容器类,或者用来生产集合容器类。Collections.synchronizedXXX()方法可以从非同步的集合容器类获得同步的集合容器类。

5.Arrays类:

1.Arrays类提供了很多处理数组相关的静态方法,如数组的查找、比较、排序等操作。另外该类还提供了一个静态方法,将数组转换成List,该方法就是

Arrays.asList(T ... array);

6.同步的集合类以及容器类(Synchronized):

1.一般的集合类和容器类都是非同步的(除了Vector和Hashtable以及它们的子类),如果用在多线程环境下必须自己写有关同步的代码。JDK中为我们提供了与一般集合容器类相应的同步类,SynchronizedCollection<E>、SynchronizedList<E>、SynchronizedMap<E>、SynchronizedSet<E>、SynchronizedSortedSet<E>、SynchronizedMap<E>,这些类都是Collections类中的静态内部类,通过Collections.synchronizedXXX()方法就可以获得相关的同步集合容器类,并且得到的同步类与作为参数的非同步类共享数据空间,当在同步类中对集合或者容器做出修改,在非同步的类中能同步感受到。例如:

List< String> list = new LinkedList<>();list.add("one");List<String> list1 = Collections.synchronizedList(list);list1.remove(0);System.out.println(list.size());

上述代码输出结果为0.

7.并发的集合类以及容器类:

1.同步集合或容器中,基本上在内部是使用synchronized来实现的,而且一个类中所有的方法使用的是同一个锁对象,在很多这会造成性能上的问题。另外,有一些复合操作,需要保持原子性,如获取最后一个元素(代码见下面),而同步类这时候就做不到了,所以这时候要考虑使用并发类了,并发类位于java.util.concurrent中。

/**
*获取最后一个元素
*/
public static Object getLast(Vector list) {  int lastIndex = list.size() - 1;  return list.get(lastIndex);
}  

2.并发容器有ConcurrentHashMap,它采用更细粒度的锁,被称为分段锁,允许一定数量的线程并发的修改它,能够提供高并发的性能。

3.还有一些有用的适用于某些并发场合的集合类,CopyOnWriteArrayList等。

4.在这里只要Java中存在同步集合容器和并发集合容器类就可以了,当遇到多线程的情况或者要求并发的情况下,再去找相关的合适的同步或并发的集合容器类。

Java集合类和容器类相关推荐

  1. c++ 将集合set的数据输出到数组中_Java集合类(容器类)简介:(摘抄)

    Java集合可用于存储数量不等的对象,并可以实现常用的数据结构(如栈.队列等待),还可以用于保存具有映射关系的关联数组.Java集合就一种容器,可以把多个对象放进容器中,Java集合可以记住容器中的对 ...

  2. Java集合类: Set、List、Map、Queue区别及应用

    Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量.一旦在数组初始化时指定了这个数组长度,这个数 ...

  3. Java数组与容器类分析资料--数组、List和Set、Map等

    2019独角兽企业重金招聘Python工程师标准>>> Java容器分析--数组 数组是Java语言内置的类型,除此之外,Java有多种保存对象引用的方式.Java类库提供了一套相当 ...

  4. java集合类(简介)

    JAVA集合类(介绍) 在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现,我在使用和面试的时候频频遇到这样的"抉择" ...

  5. Java集合排序及java集合类详解

    Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...

  6. Java集合类的基本接口

    java 集合类的基本接口:collection 和 map 什么是接口:在软件中接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现,接口其实上也可以看做是一个特殊的 ...

  7. Java 集合类详解

    0.参考文献 http://blog.csdn.net/liulin_good/article/details/6213815 1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比 ...

  8. java集合类深入分析之TreeMap/TreeSet篇

    2019独角兽企业重金招聘Python工程师标准>>> 简介 TreeMap和TreeSet算是java集合类里面比较有难度的数据结构.和普通的HashMap不一样,普通的HashM ...

  9. 【JAVA集合类(大公司面试喜欢问的) 】

    看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要 ...

最新文章

  1. [导入]Vista的translator.gadget(117.64 KB)
  2. 特斯拉超级充电桩亮相:充电5分钟能跑百公里
  3. 迫于误解压力,RMS从自由软件基金会与MIT离职
  4. linux操作系统信号捕捉函数之回调函数小结
  5. 通过微型计算机的电流,单板微型计算机控制的电流型变频调速系统
  6. Docker GitLab镜像部署
  7. 网易考拉的服务架构如何从单体应用走向微服务化? | 技术头条
  8. 怎样正确的理解和解决 ORA-01843:not a valid month
  9. android 图片编辑 画圈,Android种图片圆形化的三种方式
  10. 软件测试--04测试用例/测试方法
  11. 2020-8-5 Codeforces摸鱼报告
  12. WEBFORM--第一讲
  13. 萌新做点小玩意儿DAY-2 五子棋AI拓展思想
  14. windows下安装MinGW及C++的环境配置
  15. ceph peering流程分析
  16. 【TypeScript】使用CRA创建支持TS的React项目(从踩坑到放弃)
  17. CAT-6:六类/增强六类双绞线标准
  18. PHP连接操作sqlserver
  19. 【darknet源码解析-24】shortcut_layer.h 和 shortcut_layer.c 解析
  20. C++的 remove函数

热门文章

  1. 金士顿16GB Class4 TF卡 和16GB Class10 TF卡有什么区别
  2. 1750 万美元,Oracle 就集体诉讼案达成和解!
  3. OpenCV计算指定区域的黑白像素个数
  4. 【自考】网络经济与企业管理(一)——泛读
  5. 猫生病了,老鼠在干嘛?
  6. SpringBoot实现热部署
  7. 带你理解DOM事件流
  8. 如何理解企业安全能力框架(IPDRR)
  9. cf火线罗技鼠标宏最细教程(鬼跳,上箱,一键顺,usp速点,雷神三连发及压枪.lua脚本)
  10. 请描写一段芭蕾女孩痛苦极限劈叉的故事