Java之集合类总结

关于集合,可能初学者对它并没有什么好感,觉得很乱,也没必要细学。但是,当你学到一定程度,你就发现集合之美,感慨它的灵活、好用,而且你也开始明白数据结构这门课的作用了。不仅仅如此,集合也是众多面试官的喜好之一,所以学好集合是java入门的重中之重。



看完这两张图,顺便是不是有种晕菜的感觉,还有比这两张图更乱的说明图。不过想学的同学莫慌莫忙。这么多集合,其实就是四大类:List,Set,Map,Queue(了解就行)。我们大概需要比较深入学习有以下几种:List:ArrayList、LinkedList,Set:HashSet、TreeSet,Map:HashMap、TreeMap。

讲集合,就要先讲下集合的迭代器,java 迭代器是用来对collection进行遍历的,也是一种设计模式。相对于常用的for循环,它在大部分情况下更为方便简洁,付出的代价较小,是一个“轻量级”对象。它的名称为Iterator,它是一个接口,在使用的时候可以通过Iterator()方法返回一个迭代器对象提供了三个方法,分别是:hashnext()、next()和remove():

hashnext():用来判断指定的容器中是否还有可以迭代的元素,如果有则返回true

next():用来迭代出容器中的下一个元素,如果容器没有可以迭代元素后将抛出NosuchElementException异常

remove():从迭代器指向的collection 中移除迭代器返回的最后一个元素(可选操作)。

 

接下来,对集合来个简单概括吧:

 

List:存储有序且可重复的数据

【ArrayList】

基于动态数组实现的List类。相对于数组,它是存储可变长的数组,允许存储所有元素,包括null。采用的存储方式为线性表的顺序存储,适合按照索引快速查找数据,同时因为顺序存储造成处理数据的删除添加效率低。(数据结构的知识)采用get方法遍历元素的性能较好。需记得,它是线程不安全,当多个线程访问进行修改,需手动进行同步。

【LinkedList】

作为List接口、Deque接口的实现类,既可以当作List集合,又可以做双端队列,栈使用,其功能非常强大。基于链表结构实现,允许null元素。由于采用线性表的链式存储,适合数据的移动(删除、添加)操作,但是查询效率低。相比于ArrayList,遍历元素要采用迭代器。同时,它也是线程不安全。

 

Set:存储无序且唯一的数据

【HashSet】

散列存放数据,与添加顺序可能不同,允许null,不允许重复。重复的判断标准:通过调用hashCode()和equals(),必须当两者返回ture,元素才会被证明重复。同时,它也是线程不安全。相对其他Set,它的性能较好。

【TreeSet】

存储有序不重复的数据,需要红黑树算法进行维护元素次序(红黑树是面试高频题,这里就不展开),排序分为两种:

自然排序:针对基本类型和字符串,通过实现Comparable接口中的compareTo(Object o)方法,按升序排列。

定制排序:针对不同的需求,自行通过定义比较器-implementsjava.util.Comparator<T>,重写int compare(T a, T b)进行排序。

 

Map:存储一对数据的集合(一对数据:键值对(key-value)),通过key访问value。

【HashMap】

存储无序的键值对,key值唯一,value可以重复,允许为null。(只有一个null的key,可以有多个null的value)。与HashSet一样,通过hashcode对其内容进行快速查找,适用于插入、删除和定位元素。

TreeMap

存储有序的键值对,与TreeSet相似,同为红黑树结构,同样有两种排序方式。根据key对节点进行排序:

自然排序:所有key必须实现Comparable接口

定制排序:与TreeSet略有不同,只需传入Comparator对象,对key进行排序。

 


说完,大家有没有更晕的感觉。的确集合深究下去的确是挺难,因为涉及到大量的数据结构与算法的知识,也因为这样所以互联网大公司面试特别喜欢问这些。这些需要大家去记忆总结,同时通过看例子做题体会其中思想。

而且是不是有人有疑问学些这些集合究竟有什么用处呢?在这个大数据时代,尤其是以后工作,我们经常要根据各种需求处理大量数据,这时候能针对性地使用各种集合显得尤为重要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值