集合知识

集合知识

集合类特性(几个常用类的区别)

ArrayList: 元素单个,效率高,多用于查询  Vector: 元素单个,线程安全,多用于查询 LinkedList: 元素单个,多用于插入和删除  HashMap: 元素成对,元素可为空  HashTable: 元素成对,线程安全,元素不可为空

WeakHashMap: 是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收

Iterator与ListIterator有什么区别

1. Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。 ·

2. Iterator只能正向遍历集合,适用于获取移除元素。ListIerator继承Iterator,可以双向列表的遍历,同样支持元素的修改。比如:增加元素,替换元素,获取前一个和后一个元素的索引

Collection 和 Collections的区别

Collection是集合类的上级接口,继承与他的接口主要有Set 和List.

Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

List、Map、Set三个接口,存取元素时,各有什么特点

List  以特定次序来持有元素,可有重复元素;

Set  无法拥有重复元素,内部排序(无序);

Map 保存key-value值,value可多值。

HashMap和Hashtable的区别

都属于Map接口的类,实现了将惟一键映射到特定的值上。

一.历史原因:

Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现

二.同步性:

Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的

三.值:

HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。

Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。

四.效率:

Hashtable 比 HashMap 慢,因为它是同步的。

ArrayList和Vector的区别

ArrayList与Vector主要从二方面来说.

一.同步性:

Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的。

二.操作:

由于Vector支持多线程操作,所以在性能上就比不上ArrayList了。

三.数据增长:

ArrayList和Vector都有一个初始的容量大小,当存储进去它们里面的元素个数超出容量的时候,就需要增加ArrayList和Vector的存储空间,每次增加存储空间的时候不是只增加一个存储单元,是增加多个存储单元。

Vector默认增加原来的一倍,ArrayList默认增加原来的0.5倍。

Vector可以由我们自己来设置增长的大小,ArrayList没有提供相关的方法。

LinkedList与ArrayList有什么区别

两者都实现的是List接口,不同之处在于:

(1)、ArrayList是基于动态数组实现的,LinkedList是基于链表的数据结构。

(2)、get访问List内部任意元素时,ArrayList的性能要比LinkedList性能好。LinkedList中的get方法是要按照顺序从列表的一端开始检查,直到另一端

(3)、对于新增和删除操作LinkedList要强于ArrayList,因为ArrayList要移动数据

数组(Array)和列表集合(ArrayList)有什么区别

下面列出了Array和ArrayList的不同点:

Array可以包含基本类型和对象类型,ArrayList只能包含对象类型。

Array大小是固定的,ArrayList的大小是动态变化的。

ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()  等等。

对于基本类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

Enumeration接口和Iterator接口的区别有哪些

Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。

HashSet和TreeSet有什么区别

HashSet有以下特点:

A. 无序(不能保证元素的排列顺序,顺序有可能发生变化)B. 不同步C. 允许空值(集合元素可以是null,可以放入多个null,但会自动覆盖)

当向HashSet结合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等注意,如果要把一个对象放入HashSet中,重写该对象对应类的equals方法,也应该重写其hashCode()方法。其规则是如果两个对象通过equals方法比较返回true时,其hashCode也应该相同。另外,对象中用作equals比较标准的属性,都应该用来计算 hashCode的值。

TreeSet有以下特点:

A. 有序

1. TreeSet是由一个树形的结构来实现的(数据结构是二叉树),它里面元  素是有序的

2.TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状 态,支持两种排序方式,自然排序和定制排序。其中自然排序为 默认的排序方式;定制排序,TreeSet中的对象元素需要实Comparable  接口

TreeSet类中跟HashSet类一样也没有get()方法来获取列表中的元素,所以 也只能通过迭代器方法来获取

二叉树:

B. 不允许空值

1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过 Set用的只是Map的key

2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是 多 了一个有序性.

3. TreeSet类中跟HashSet类一样也没有get()方法来获取列表中的元素,所以也只能通过迭代器方法来获取

4. HashSet是基于hash算法实现的,性能优于TreeSet,通常使用 HashSet。在我们需要对其中元素排序的时候才使用TreeSet。

HashMap,LinkedMap,TreeMap的区别

HashMap,LinkedHashMap,TreeMap都属于Map。

LinkedHashMap是HashMap的子类。

Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复

1.HashMap的内部结构是一个数组,线性顺序存储,二次结构使用线性的单链表。使用key的hashCode做二次hash之后,再截取小于数组长度的值为索引值。key可以为null,存在索引为0的位置上。由于使用了数组,所以有一个负载因子loadFactor的概念(临界阈值threshold)和resize。resize比较耗时,冲突时链式遍历查找也比较耗时,所以选定一个合适的初始容易比较重要。存取性能都较高。迭代遍历时一维使用数组,二维使用链表。

HashMap是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的 键为Null;允许多条记录的值为 Null;HashMap不支持线程的同步,即任 一 时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap 具有同步的能力。

2.LinkedHashMap是HashMap的子类。内部结构是一个数组,线性顺序存储,二次结构使用线性的单链表,但同时内部维护了一个双向循环链表,可以保持顺序。access-order=false默认为使用新增存储顺序,access-order=true则指定使用读取和访问顺序。removeEldestEntry=false(当指定为true时,就是实现LRU算法的缓存容器,当然要指定淘汰时的使用频率和容量上限,其实是一个最近最少使用-->最近使用access-order=true/最新存储access-order=false)。存取性能较HashMap差-些,但相差不大。header.after为尾方向,header.before为首方向。迭代遍历时entrySet().iterator()跟HashMap一样(有点困惑,为什么不按线性顺序进行迭代,只能重写entrySet(),keySet()和values()方法)。适用于有缓存设计需求的情况(需继承)。 3.TreeMap的内部结构是一棵红黑树(又叫排序数,是二叉树的一种),使用链式存储,可以指定比较器Comparator,key需实现Comparable接口。key不能为null。存结点性能稍差,因为需要调整树结构;取结点用的是链表遍历,但是属于有序比较,性能中等。迭代遍历时用的树的中序遍历,是一个有序序列。适用于有排序需求的情况。

时间: 2024-08-07 21:16:55

集合知识的相关文章

常见集合知识

java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复.Hashmap 是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的. HashMap最多只允许一条记录的键为Null;允许多条记录的值为 Null;

一、Java集合知识

集合: 存储对象数据的集合容器. 一.单列集合 ----------| Collection 单例集合 的根接口----------------| List 如果是实现了List接口的集合类,具备的特点: 有序,可重复.---------------------| ArrayList ArrayList底层是使用了Object数组实现 的. 特点: 查询速度快,增删慢.---------------------| LinkedList LinkedList底层是使用了链表数据结构实现的.特点:

day3 set 集合知识

集合的特点:无序的,不重复,可以嵌套 这是集合 {1,2,3,4,5} 这是字典 {"name":"wangfei", "age":18} 创建一个集合,方法有3种 方法一 >>> s1 = {"123", "456"} >>> type(s1) <class 'set'> 方法二 创建一个空的集合 >>> s2 = set() >&g

Java集合知识总结详解

两大体系:Collection,Map 一.Collection: List 接口 : List:里面对象全部是有序的(通过三种方法来遍历) ArrayList,LinkedList,Vertor ArrayList:本质上 ArrayList 里维护的就是动态可变长度的数组. 常用方法:  增:add(4) 对象 位置+对象  集合 集合+位置.  删:remove(2)下标删对象,直接删对象.  改:set(1) 下标  对象.  查:get() 下标得对象, indexOf()对象得下标.

Java 集合知识总结

一.Java集合主要有collection和map集合两个接口,Java中的集合都是由这两个接口派生的. Collection接口和主要实现类如下: Collection主要API: boolean add(Object obj);添加元素 boolean addAll(Collection c);把集合C的元素添加到指定集合里. void clear();清除集合所有元素,集合长度变为0 boolean contains(Object o);集合中是否包含指定元素 boolean contai

java 集合知识整理

java集合类图 HashMap和Hashtable的区别   HashMap HashTable  继承方式 extends AbstractMap implements Map extends Dictionary implements Map 线程安全 是 否 效率相对比 高 低 允许有null的键和值 是 否 判断包含的方法 containsvalue和containsKey contains hash数组默认大小 11, 16, hash数组增加方式 old*2+1 2的指数增加 Li

fullcalendar日历控件集合知识

1.基本的语法: 首先,fullcalendar和JQUERY一样,以面向对象的方式来组织代码.当然,这里的面向对象不过指能够把整个fullcalendar理解为一个类,这个类里包含有非常多的属性.方法.托付(函数回调)作为成员变量.通过为这些成员变量赋值,就可以实例化出一个符合自己需求的fullcalendar实例出来,即终于在浏览器里渲染出的日历.换句话说,我们所做的绝大多数工作就是依照fullcalendar的语法约定去配置出一个符合我们需求的fullcalendar实例.除非对于极少的特

Java 集合知识总结(二)

Set集合 Set和Collection基本相同,Set不允许有重复元素,集合内的元素是无序的. 1) HashSet类 特点:不能保证元素的排列顺序.不是同步的,多线程操作时需要通过代码保证其同步性.集合元素值可以为null.HashSet添加原始的时候根据元素的hashCode值来计算 它的存储位置,方便快速该元素.(hash算法的功能是保证快速查找被检索的对象,根据元素的hashcode值计算该元素的存储位置,从而快速定位元素位置.) HashSet判断元素是否相等通过equals()方法

Java List集合的知识补充

看到黑马视频第4天数据库操作中,List<Person> personList=new ArrayList<person>(); 实在不明白,就查了下Java课本,结果没提到.原来List是个系统一个接口. 原帖http://cq520.iteye.com/blog/1826788 大家知道,集合框架是为了表示和操作集合而规定的一种统一的标准的体系结构,学习集合知识有利于我们解决一系列例如保存数据与对象的问题. 常用的集合在系统中定义了两大接口,List和Set 这里我们就来讨论一