这是第一次在csdn中编写博客,就针对Java集合简单的整理了一期集合资料,谈一下自己的理解与看法。

在Java的集合中,大致分为四类:Map,Iterable,Collection,Arrays。
一、Map集合
Map集合分为HashMap、TreeMap、LinkedHashMap三类。
HashMap:访问查询速度最快;更适合在Map中插入,删除和定位元素时使用。
TreeMap:具有排序的功能;
LinkedHashMap:既保留了查询的速度,且保存了元素的顺序。

二、Iterable接口
1、可以用for循环或foreach循环遍历集合。
2、实现Iterable接口的集合类必须提供一个iterator()的方法,返回值为iterator。
3、Iterator方法包括hashNext():是否存在下一项,next():获取下一项, remove():该方法可以删除next()最新返回的项(注意:只能使用一次,除非对next()进行再次调用)

三、Collection接口(位于java.util包)
1、自带的方法:size():返回集合中的项数,isEmpty():判断集合是否为空,contains(Object):判断集合中是否包含某项,clear():清除集合中所有元素,add(E):从集合中添加某项, remove(Object):从集合中删除某项, iterator():遍历集合

2、List接口:特点:可以添加重复的元素;有顺序。
(1)、ArrayList:get和set调用花费时间较短。
(2)、LinkedList新项的插入和现有项的删除花费时间较短

3、Set接口:特点:不保存重复的元素;没有顺序。
(1)、HashSet:查询速度最快而无序,集合元素可以是null,但只能放入一个null。
(2)、TreeSet:具有排序的功能。
(3)、LinkedHashSet:元素按照被添加的顺序保存。

问1:HashMap和HashSet区别

HashMap:
①实现了Map接口;
②存储键值对;
③调用put()向map中添加元素;
④HashMap使用key计算hashcode;
⑤HashMap相对于HashSet较快,因为它是使用唯一的键获取对象;

HashSet:
① 实现了Set接口;
②存储对象;
③调用add()向set中添加元素;
④HashSet使用成员对象计算hashcode;
⑤HashSet较HashMap来说比较慢;

4、Queue接口:特点:先进先出

四、Arrays数组
(1)Array和ArrayList的区别?
①.ArrayList是Array的复杂版本
②.存储的数据类型:Array只能存储相同数据类型的数据,而ArrayList可以存储不同数据类型的数据
③.长度的可变:Array的长度是固定的,而ArrayList的长度是可变的。
(2) 怎样将一个数组转成List,有什么方法?
数组转list,可以使用Arrays.asList(数组)。
List转数组,使用list.toArray()。

问2:Collection接口的remove()方法和Iterator接口的remove()方法区别?

①性能方面
Collection的remove方法必须首先要使用单链表结构查询,单链表查询效率比较低,需要从集合中一个一个遍历才能找到该对象;
Iterator的remove方法结合next()方法使用,比如集合中每隔一项删除一项,Iterator的remove()效率更高。
②容错方面
在使用Iterator遍历时,如果使用Collection的remove则会报异常,会出现ConcurrentModificationException,因为集合中对象的个数会改变而Iterator 内部对象的个数不会,不一致则会出现该异常。
在使用Iterator遍历时,不会报错,因为iterator内部的对象个数和原来集合中对象的个数会保持一致。

HashMap的实现原理:通过put和get方法存储和获取对象。在存储时,将K/V传给put方法,此时再调用hashcode计算hash从而得到bucket位置然后进行进一步存储,HashMap会根据当前bucket的占用量自动调整容量。在获取对象时,将K传给get,调用hashcode计算hash从而得到bucket位置,并进一步调用equals()方法确认键值对。

HashMap与HashSet相比,HashMap查询速度更胜一筹。