集合方法总结 第1篇
Collections还提供了多个线程安全锁synchronoizedXxx()方法,该方法可以将指定的集合包装成线程同步的集合,从而解决多线程的并发访问集合中的线程安全问题。
例如:
集合方法总结 第2篇
集合、数组都是对多个数据结构进行存储操作的结构,简称Java容器。但是随着数据量的增大,数组越来越不能满足现代的开发要求。比如数组初始化以后,长度就确定了,不便于扩展;数组声明的时候,就决定了元素初始化的类型且添加、删除操作效率低下。 Java集合可以看做一个容器,比较灵活,可以动态的把多个对象xxx容器中。Java集合可以存储数量不等的多个对象,还可以保存具有映射关系的关联数组。
Java集合可以分为Collection和Map两种体系
①Collection接口:单列数据,定义了存储一组对象方法的集合。 包含了以下子接口。
<1>List接口:存储有序的,可以重复的数据,实现类有ArrayList,LinkedList,Vector
<2>Set接口:存储无序的,不可重复的数据,实现类有HashSet,LinkedHashSet,TreeSet
②Map接口:双列集合,用来存储一对一对的数据,键值对(key—value)存储
其中包含了Map接口的实现类有:HashMap,LinkedHashMap,TreeMap,HashTable,Properties
Collection集合框架图如下:虚线是实现关系,实线是继承关系
Map集合框架图如下:虚线实现关系,实线是继承关系
集合方法总结 第3篇
注:以下是高中常用的集合(需要背)
-------------------------------------------------------------------------------
例题3:
-------------------------------------------------------------------------------
变式训练3
A 0
B 1
C -1
D 0或1
答案:B
-------------------------------------------------------------------------------
集合方法总结 第4篇
方式一:Iterator迭代器接口
注意:Iterator对象称为迭代器,主要用于遍历Collection集合中的元素。
设计模式中有种模式叫做迭代器模式,用于提供一种方法访问一个容器对象中的元素,又不暴露该对象中的内部细节。迭代器模式因此而生。
Collection接口继承了接口,该接口有一个iterator()方法,那么所有实现Collection接口的集合类都有一个iterator()方法,返回一个Iterater的接口对象。集合对象每次调用iterator()方法都得到一个全新的迭代器对象,xxx标在第一个元素之前。
Iterator接口中的方法:
① hasNext():判断是否还有下一个元素
② next():指针下移;并且将下移以后集合位置上的元素返回
③ remove():删除集合中的元素
Iterator的执行原理:
开始遍历集合的时候,默认next()指向的集合第一个元素之前的位置,hasNext()方法判断集合中是否有下一个元素。如果有下一个元素,next()方法指针下移,并将下移集合位置上的元素进行返回。直到while(())为false;迭代过程如下图所示。
注意:Iterator可以删除集合的元素,但是遍历过程中可以通过迭代器对象的remove方法,而不是集合对象的remove方法。
remove方法代码示例:
方式二:for循环遍历,增强for循环实现集合的遍历
集合方法总结 第5篇
我们可以用自然语言来描述一个集合,但这将给我们带来很多不便,除此之外还常用列举法和描述法来表示集合.
1. 自然语言法:用文字叙述的形式描述集合的方法.如:大于等于2且小于等于8的偶数构成的集合.
2. 列举法:把集合中的元素一一列举出来,写在大括号内.如:
3.描述法:把集合中的元素的公共属性描述出来,写在大括号{ }内.具体方法:在大括号内先写上表示这个集合元素的一般符号及取值(或变化)范围,再画一条竖线,在竖线后写出这个集合中元素所具有的共同特征.
4.图示法:图示法主要包括Venn图、数轴上的区间等.为了形象直观,我们常常画一条封闭的曲线,用它的内部来表示一个集合,这种表示集合的方法称为xxx(Venn)图法. 如下图,就表示集合.
集合方法总结 第6篇
Set接口是Collection接口的子接口,类比List接口,Set接口是无序的,不可重复的。Set对象判断两个对象是否相同使用的方法是equals方法。
① HashSet:
HashSet底层是 数组 + 链表 形式,底层其实是HashMap
HashSet是Set接口的典型实现,大多数时候使用Set集合时,都使用的是这个类。HashSet按照Hash算法来存储集合中的元素,因此具有很好的存取、查找、删除的性能。
HashSet具有以下特点:不能保证元素的顺序排列,HashSet不是线程安全的,集合元素可以是null
HashSet集合判断两个元素相等的标准,两个对象通过hashCode()方法比较相等,并且两个对象的equals方法的返回值相等。
存放Set容器中的对象,对应的类一定要重写equals方法和hashCode(Object obj)方法,以实现对象的相等规则,即:相等的对象一定有相等的散列码。
关于equals和hashCode方法的重写,具体请访问 :。其实HashSet底层是HashMap,包括equals和hashCode方法的重写。
② LinkedHashSet:
LinkedHashSet是HashSet的子类,LinkedHashSet根据元素的hashCode值来存储元素的存储位置,但他同时使用双向链表维护元素的次序,使元素插入的时候看起来有序。LinkedHashSet插入的性能低于HashSet,LinkedHashSet不允许元素重复。
③ TreeSet:
TreeSet是SortedSet接口的实现类,TreeSet可以确保元素集合处于排序状态,TreeSet的底层使用的是红黑树存储结构。红黑树有两种排序方式,自然排序和定制排序。也就是使用Comparable接口和Comparator接口,具体请访问:
(1)HashSet底层源码分析:添加元素的过程
向HashSet集合中添加元素a,首先调用元素a所在类的hashCode方法,计算元素的哈希值,通过计算元素的哈希值确定元素在HashSet底层数组中存放的位置(索引位置)。首先判断数组此位置上是否已经有了元素:
① 如果此位置上没有其他元素,那么就添加成功。
② 如果此位置上有其他元素(或者以链表形式存在的多个元素),则首先比较元素a和元素b的哈希值:
<1>如果元素a的哈希值不相同,则元素a添加成功
<2>如果元素的哈希值相同,进而需要调用元素a所在类的equals方法
(1)equals()方法返回true,元素a添加失败,说明元素的内容是否相同
(2)equals()方法返回false,元素添加成功,说明元素的内容是不一样的,说明添加成功。
(2)LinkedHashSet底层源码分析:添加元素的过程
LinkedHashSet添加元素的时候,使用的是双向链表。添加元素的位置是不确定的,但是添加元素的顺序是确定的。
(3)TreeSet底层源码分析:添加元素的过程
向TreeSet集合汇总添加数据,要求的是相同类的对象。其中两种排序方式:自然排序和定制排序。
在自然排序中,比较两个对象是否相同的标准是compareTo()返回0,不再是equals()比较 。
在定制排序中,比较两个对象是否相同的标准是,compare()返回值为0,不再是equals()比较
红黑树就是二叉树,其中二叉树满足的条件是:当前节点始终比左节点的值大,始终比右孩子的值大。
小结:
Set接口:存储无序的,不可重复的元素
HashSet:底层是HashMap实现的。作为Set接口的主要实现类,线程是不安全的,可以存储null值
LinkedHashSet:底层是链表结构。作为HashSet的子类,遍历其内部数据的时候,可以按照添加顺序遍历
TreeSet:底层是红黑树结构,按照对象的指定属性进行排序。比如Person类中属性有id,name;通过实现Comparable接口进行排序
在向Set中添加元素的时候,其所在的类一定要重写hashCode()方法和equals()方法。重写hashCode()和equals()方法尽可能的保持一致性,相等的对象一定要有相等的散列码。