Java集合类 集合类 集合类其实就是为了更好地组织、管理和操作我们的数据而存在的,包括列表、集合、队列、映射等数据结构。...集合根接口 Java中已经帮我们将常用的集合类型都实现好了,我们只需要直接拿来用就行了 所有的集合类最终都是实现自集合根接口的,比如我们下面就会讲到的ArrayList类,它的祖先就是Collection...集合类的实现方案有很多,可能是链式存储,也有可能是数组存储,不同的实现有着不同的遍历方式,而迭代器则可以将多种多样不同的集合类遍历方式进行统一,只需要各个集合类根据自己的情况进行对应实现就行了。...Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。...list.add(10); //不支持,会直接抛出异常 } 将一个可修改的集合变成只读的集合: ~~~java public static void main(String[] args) {
集合类主要包括List,Set,Map,Queue,类图如下: ? Map ?...,可重复的集合,集合中每个元素都有其对应的顺序索引。...ArrayList和Vector类都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的,允许再分配的Object[]数组。...Vector还有个实现类Stack,实现元素能够像栈的操作进行,先进后出。...Set集合不允许包含相同的元素,如果试图把两个相同的元素加入同一个Set集合中,添加操作失败,add()方法返回false,且新元素不会被加入。
这样做的目的作者也给出了解释,就是通常的hash算法都总是碰撞,我们这样做的目的尽量使得hash值较为分散(均匀)。...resize操作; 3、以HashMap索引数组表的长度减一与key的hash值进行与运算,得出在数组中的索引,如果索引指定的位置值为空,则新建一个k-v的新节点; 4、如果不满足的3的条件,则说明索引指定的数组位置的已经存在内容...; 10、最后,回到那个被记住的被碰撞节点,如果它不为空,默认情况下,新节点的值将会替换被碰撞节点的值,同时返回被碰撞节点的值(V)。...,假设线程A插入的记录计算出来的 hash桶索引和线程B要插入的记录计算出来的 hash桶索引是一样的,那么当线程B成功插入之后,线程A再次被调度运行时,它依然持有过期的链表头但是它对此一无所知,以至于它认为它应该这样做...,如此一来就覆盖了线程B插入的记录,这样线程B插入的记录就凭空消失了,造成了数据不一致的行为。
大家好,又见面了,我是你们的朋友全栈君。...Java集合类Collection,它是一个接口,他有两个子接口List和Map,Collection主要方法 boolean add(E e); boolean addAll(Collection c); Object[] toArray(); boolean equals(Object o); Iterator iterator(); List在Collection基础上新增的主要方法...super E> c); // 参考Arrays.sort E get(int index); // 获取元素的值 E set(int index, E element); // 设置元素的值 int...indexOf(Object o); // 找o的位置 int lastIndexOf(Object o); // 最后一个匹配o的位置 List subList(int fromIndex
工具类概述 集合工具类,定义了除了存取以外的集合常用方法。 直接二分查找 int i = Collections.binarySearch(list, x); 成功返回索引。...Integer[] arr = list.toArray(new Integer[10]); sout(arr.length); sout(Array.toString(arr)); // 数组转成集合...// 此时为受限集合,不能 添加和删除!...String[] name = {"张三","李四","王五"}; List list2 = Arrays.asList(names); // 把基本类型数组转为集合时,需要修改为包装类
groupMemberDO.getGroupId()); } return DistinctElementFilter.filterList(groupIds); } 在实际开发根据业务场景选择相应的集合类...重复,那么会覆盖之前的; 实现类 HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的数据是无序的。...实现类LinkedHashSet:此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。...不允许集合中有重复的数据可以选择HashSet。...Arrays 、此类包含用来操作数组(比如排序和搜索)的各种方法。 2.Collections、主要提供了在 collection 上进行操作的静态方法(同步集合类方法) 。
1.java集合类图 1.1 ? 1.2 ?...上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap...发现一个特点,上述所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含hashNext(),next(),remove()三种方法。...还有一个特点就是抽象类的使用。如果要自己实现一个集合类,去实现那些抽象的接口会非常麻烦,工作量很大。...这个时候就可以使用抽象类,这些抽象类中给我们提供了许多现成的实现,我们只需要根据自己的需求重写一些方法或者添加一些方法就可以实现自己需要的集合类,工作流昂大大降低。 1.3 ?
二、层次关系 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。...Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。...Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法: 1.hasNext()是否还有下一个元素。...3、Map(键值对、键唯一、值不唯一) Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。...六、Map集合 实现类:HashMap、Hashtable、LinkedHashMap和TreeMap HashMap HashMap是最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值
前言: 这篇准备好好总结一下Java的集合类,在顺便带上Arrays,把这几者之间的关系说清楚,在java.util包中提供了一些集合类,这些集合类又被称作容器,这时候可能我们就联想到了就是Arrays...TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口。...因此,TreeSet类实现的Set集合在遍历集合时可以按照自然顺序排序,也可以按照指定比较器递增排序,也就是可以通过比较器对TreeSet类实现的Set集合中的对象进行排序,下面定义了一个StudentClass...类,重点是这类要想添加到TreeSet实现的集合当中的话就得实现Comparable接口,实现compareTo方法: image.png 下面是它的调用和打印的东西,我们粘贴出来,在最后会是打印的日志...Key,每一个Key只能映射一个Value,下面是Map的基本使用,其实举一反三,这时候也大概知道怎么写怎么用了; 建议使用HashMap集合,因为HashMap类实现Map集合,原因也是它的优点
Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 ...让我们转到对框架实现的研究,具体的集合类遵循命名约定,并将基本数据结构和框架接口相结合。除了四个历史集合类外,Java 2 框架还引入了六个集合实现,如下表所示。...历史集合类,之所以这样命名是因为从 Java 类库 1.0 发行版就开始沿用至今了。 如果从历史集合类转换到新的框架类,主要差异之一在于所有的操作都和新类不同步。...这里有一些实用问题,常在核心Java面试中问到。 1、什么是Java集合API Java集合框架API是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法。...Hashtable是原始集合类之一(也称作遗留类)。HashMap作为新集合框架的一部分在Java2的1.2版本中加入。
二、层次关系 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 ? Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。...Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。...Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法: 1.hasNext()是否还有下一个元素。 2.next()返回下一个元素。...3、Map(键值对、键唯一、值不唯一) Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。...六、Map集合 实现类:HashMap、Hashtable、LinkedHashMap和TreeMap HashMap HashMap是最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值
一 集合和数组 因为本人也是个go的爱好者,所以对于集合类算是摸的比较透的。 说到集合,必须了解数组和集合。 Java的数组长度固定,集合长度不定。集合是特定的数据结构的集合。...go和Java的不同就是,切片和键值对要自己写方法成为特定的数据结构,才能合Java的集合类差不多。 也就是说Java的集合其实是Java开发者为了开发方便,定义的一系列数据结构的。...那么只要理解java几个数据结构的特性那么就很好理解了。 二 基本接口 map,Iterable,collection 最上层的接口 map和Iterable。...只需要我们取出来的时候有序即可,而Stream特性则大大的简化了我们自己写排序的代码量。 第二,分布式下考虑单机的线程安全,再用线程安全类简直杀鸡用牛刀。...第三,插入速度的考量,降低io操作硬盘操作写操作,基本是每个系统到了后期性能提升一定要考虑的事情,而此时基本使用数组而非集合。 综上,我们基本使用查询快的类就好了。
集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。 二、层次关系 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 ?...Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。...List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。 Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。...Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法: 1.hasNext()是否还有下一个元素。 2.next()返回下一个元素。...六、Map集合 实现类:HashMap、Hashtable、LinkedHashMap和TreeMap HashMap HashMap是最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值
java技术学习之道 每天分享各种技术文章 作者:lipper_ 来源:cnblogs.com/leeplogs 一、集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定...集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。 二、层次关系 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 ?...Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。...List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。 Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。...Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法: 1.hasNext()是否还有下一个元素。 2.next()返回下一个元素。
jdk1.8.0_144 HashMap作为最常用集合之一,继承自AbstractMap。...HashMap在类中定义了一个size变量,再此处直接返回size变量而不用调用entrySet方法返回集合再计算。可以猜测这个size变量是当插入一个key-value键值对的时候自增。...此时线程T1对扩容前的HashMap元素已经完成了转移,但由于Java内存模型的缘故线程T2此时看到的还是它自己线程中HashMap之前的变量副本。此时T2对数据进行转移,如下图所示。 ? ...并发环境一定需要使用ConcurrentHashMap线程安全类。 ...这个方法容易陷入的陷阱是key值是一个自定义的pojo类,且并没有重写equals和hashCode方法,此时用pojo作为key值进行删除,很有可能出现“删不掉”的情况。
jdk1.8.0_144 本文阅读最好先了解HashMap底层,可前往《Java集合中的HashMap类》。 LinkedHashMap由于它的插入有序特性,也是一种比较常用的Map集合。...它继承了HashMap,很多方法都直接复用了父类HashMap的方法。本文将探讨LinkedHashMap的内部实现,以及它是如何保证插入元素是按插入顺序排序的。 ...功能可以实现,但这带来的查找效率达到了O(n),显然远远大于HashMap在没有冲突的情况下O(1)的时间复杂度。这就丝毫不能体现出Map这种数据结构随机存取快的优点。 ...LinkedHashMap继承了HashMap类,并且没有重写put方法,而是直接沿用了HashMap#put方法。...有关HashMap#put已经在《Java集合中的HashMap类》有了较为详细的介绍。
参考链接: Java中的链式异常 Throwable类是整个异常体系类的父级类,当然最终追根溯源到底的父类当然要归于Object类。...在编译时,如果类没有继承的父类的话,会自动为其加入继承父类Object的相关的类的编译信息,这样在后面虚拟器进行解释执行的时候,按照存在父类进行处理就可以了。 2....在虚拟机进行执行的时候,如果仍然存在没有父类的类,仍然会默认其父类为Object。 第一种情况属于再编译器进行处理,第二种情况属于在虚拟机上面做适当的处理。 ...子类Error和Exception Error主要是用于表示Java和虚拟机内部的异常信息,而Exception异常则是由于程序中可能存在各种的问题,是需要使用者去注意和捕获的异常。 ...这个cause属性使得java可以通过链式的结构来组织异常信息,通过cause指向其下一个异常的抛出类。依次构成链状的结构。
Java 提供了一个操作 Set 、 List 和 Map等集合的类:Collections , 该工具类里提供了大量方法对集合元素进行排序、 查询和修改等操作,还提供了将集合对象设置为不可变、对集合对象实现同步控制等方法...下面程序简单示范了利用 Collections 工具类来操作 List 集合: SortTest.java public class SortTest { public static void main...Java 中 常用的集合框架中的实现类 HashSet 、 TreeSet 、ArrayList 、 ArrayDeque 、 LinkedList 、 HashMap和 TreeMap...Co llections 提供了如下三类方法来返回一个不可变的集合。...上面三类方法的参数是原有的集合对象 , 返回值是该集合的"只读 " 版本 。 通过 Collections 提供的三类方法,可以生成"只读"的 Collection 或 Map。
Java集合类实现原理 1.Iterable接口 定义了迭代集合的迭代方法 iterator() forEach() 对1.8的Lambda表达式提供了支持 2....4.Set接口 插入无序 元素不能重复 底层均为Map集合实现 4.1 TreeSet类 先来瞅一眼这个类的继承关系吧 实现了AbstractSet拥有了Set的属性和方法 实现了NavigableSet...NavigableSet, Cloneable, java.io.Serializable { /** * 存放生成的TreeMap集合 */ private...) keyset() values() entrySet() 5.1Entry类 Map类的内部类,用来获取所有的键值 5.2HashMap类 put的时候,会通过hash算法,计算一个index,这个...Java配置文件中用的居多 可以直接通过load方法加载配置文件,通过store方法存储配置文件 泛型锁定,为两个String类型
领取专属 10元无门槛券
手把手带您无忧上云