针对Java集合类的小总结

Java集合类包位于java.util下,有很多常用的数据结构:数组、链表、队列、栈、哈希表等等。了解不同的集合类的特性在开发过程中是比较重要的,感谢@兰亭风雨的专栏分析,这里我也根据自己的理解做轻度的总结,不再进行分析,因为上面的博客分析已经相当优秀。



List接口实现,一般常用的为ArrayList和LinkedList,还有不太常用的Vector,Stack。比如JDK文档声明

Deque 接口及其实现提供了 LIFO 堆栈操作的更完整和更一致的 set,应该优先使用此 set,而非Stack类。例如:

Deque<Integer> stack = new ArrayDeque<Integer>();

对ArrayList和Vector进行一个比较:

  • ArrayList非线程安全,Vector是线程安全的,想要使用线程安全的ArrayList类可以Collections.synchronizedList()进行包裹返回线程安全的对象,或者使用CopyOnWriteArrayList
  • 因为ArrayList和Vector基于数组实现,默认大小为10,所以需要有扩容操作,ArrayList的扩容是1.5倍+1或者所需大小,Vector是2倍
  • 都大量使用了Arrays.copyof()和System.arraycopy()进行复制,native方法,拥有数组操作的优点与不足

ArrayList和LinkedList:

  • LinkedList基于双向链表实现,按Index访问时会有一个加速操作,非线程安全
  • LinkedList还实现了栈和队列的操作方法,因此也可以作为栈、队列和双端队列来使用
  • LinkedList无参构造方法直接建立一个仅包含head节点的空链表
  • 两个都允许Null值


Map接口实现类HashMap和HashTable:

Hash表的解决hash值冲突的常用方法有两种,一种是拉链法也就是每个hash值对应一个链表,另一种是线性探测法。

  • HashMap和HashTable处理冲突的方式是拉链法
  • HashMap非线程安全,HashTable线程安全
  • HashMap初始容量是16,加载因子是0.75,扩容后也必须为2的整数次幂;HashTable是12,且不为2的整数次幂
  • Hashtable扩容时,将容量变为原来的2倍加1,而HashMap扩容时,将容量变为原来的2倍。
  • HashMap可以为Null,HashTable不能为Null
  • Hashtable计算hash值,直接用key的hashCode(),而HashMap重新计算了key的hash值Hashtable计算hash值,直接用key的hashCode(),而HashMap重新计算了key的hash值,HashMap中通过h&(length-1)的方法来代替取模,同样实现了均匀的散列,但效率要高很多,这也是HashMap对Hashtable的一个改进。

TreeMap:

  • 基于2-3平衡树的红黑树来实现,最下面会对红黑树做一个简单的介绍
  • TreeMap的key不能为null,排序时要实现Comparable接口,HashMap要求重写hashCode方法和equals方法来确保没有重复的key
  • TreeMap的查询、插入、删除效率均没有HashMap高,一般只有要对key排序时才使用TreeMap


红黑树介绍:

红黑树是一种特殊的2-3平衡树,它可以保证所有的黑色边到根节点的距离相等。红黑树是有序的二叉树,通过左旋转、右旋转、变色等操作,使树基本保持平衡状态,防止出现一边倒的情况,它具有下面的性质:

  • 每个节点都只能是红色或者黑色
  • 根节点是黑色
  • 每个叶节点(NIL节点,注nil 节点就是空节点,在红黑树的实现中,nil 节点代替二叉树中的NULL)是黑色的。
  • 如果一个结点是红的,则它两个子节点都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。
  • 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
时间: 2024-07-31 14:35:17

针对Java集合类的小总结的相关文章

Java集合类: Set、List、Map、Queue使用

目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量.一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果我们需要保存一个可以动态增长的数据(在编译时无法确定具体的数量),java的集合类就是一个很好的设计方案了. 集合类主要负责保存.盛装其他数据,因此集合类也被称为容

Java集合类相关面试题

1.Collection和Collections的区别 java.util.Collection 是一个集合接口,Collection接口在Java类库中有很多具体的实现,例如List.Set java.util.Collections 是针对集合类的一个帮助类,它提供了一系列的静态方法实现对各种集合的搜索.排序.线程安全化等操作. 2.ArrayList与Vector的区别 这两个类都实现了List接口(List接口继承自Collection接口).它们都是有序集合,它们内部的元素都是可以重复

【转载】Java集合类Array、List、Map区别和联系

Java集合类主要分为以下三类: 第一类:Array.Arrays第二类:Collection :List.Set第三类:Map :HashMap.HashTable 一.Array , Arrays Java所有"存储及随机访问一连串对象"的做法,array是最有效率的一种. 1.效率高,但容量固定且无法动态改变.array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量. 2.Java中有一个Arrays类,专门用来操作array .array

Java集合类: Set、List、Map、Queue使用场景梳理

Java集合类: Set.List.Map.Queue使用场景梳理 本文主要关注Java编程中涉及到的各种集合类,以及它们的使用场景 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E6%8E%92%E5%BA%8F%E5%8F%8Ajava%E9%9B%86%E5%90%88%E7%B1%BB%E8%AF%A6%E8%A7%A3%28collection%E3%80%81list%E3%80%81map%E3%

JAVA集合类(大公司面试喜欢问的)

 分类: 核心JAVA(11)  版权声明:本文为博主原创文章,未经博主允许不得转载. 看了一些所谓大公司的Java面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中就包含了一系列重要的集合类,而对于集合类,主要需要掌握的就是它的内部结构,以及遍历集合的迭代模式. 接口:Collection 所有集合类的根类型,主要的一个接口方法:boolean add(Ojbect c)虽返回的是boolean,但不是表示添加成功与

基础知识《六》---Java集合类: Set、List、Map、Queue使用场景梳理

本文转载自LittleHann 相关学习资料 http://files.cnblogs.com/LittleHann/java%E9%9B%86%E5%90%88%E6%8E%92%E5%BA%8F%E5%8F%8Ajava%E9%9B%86%E5%90%88%E7%B1%BB%E8%AF%A6%E8%A7%A3%28collection%E3%80%81list%E3%80%81map%E3%80%81set%29.rar http://blog.sina.com.cn/s/blog_a345

Java反射的小故事

Java反射的小故事: 首先定义一个Java类 1 package com.xiaoysec.test; 2 3 public class Person { 4 private String name; 5 private String sex; 6 private int id; 7 8 public String getName() { 9 return name; 10 } 11 12 public void setName(String name) { 13 this.name = na

java集合类源码剖析

java集合类源码剖析 hashmap 底层实现 HashMap.Entry数组,数组+拉链 static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; final int hash; } Entry对象代表了HashMap中的一个元素(键值对) hashCode相同(碰撞)的元素将分配到Entry数组的同一个桶中 同一个桶中的Entry对象由nex

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

看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要需要掌握的就是它的内部结构,以及遍历集合的迭代模式. 接口:Collection Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Jav