美文网首页
Java基础 浅谈常用的集合类

Java基础 浅谈常用的集合类

作者: 白衬衫少年 | 来源:发表于2017-03-09 20:09 被阅读0次

“简单不先于复杂,而是在复杂之后.” —— Alan Perlis

2.jpg

推荐链接——http://www.jianshu.com/p/ba0fdee47cb4


2.png

对于集合,大家都不陌生了,常见的集合接口Set、List、Map等,其中Set和List继承自Collection。

Collection是一组对象的集合,而Map存储的方式不一样,他是以键值对的形式存放多个对象的。

Set和List又有区别,Set中的元素无序且不重复,而List中的元素则是有序且允许重复的。

Set、List、Map都是接口类,定义的是规范,具体使用时,还是需要其实现类的实例。一般我们见得比较多的就是HashSet、TreeSet、ArrayList、LinkedList、HashMap等,另外还有Vector、HashTable什么的,这个涉及了多线程中的线程安全以及性能问题,现在出场率比较低了。


Set:HashSet、TreeSet

关于去重:Set的中判断放入元素是否重复,都是基于对象的equals()方法的返回值来实现的。

关于顺序和排序:其实作为无序的Set,本身应该是不具备排序功能的,因为根本就没有顺序。

HashSet对于元素的存储位置是取决放入对象的HashCode,是散列形式的;另外,还有一个名叫LinkedHashSet的实现类,除了使用HashCode来决定元素位置之外,同时还是用了链表来维护元素的次序(Linked),因此对其插入元素时,看起来是有序的;
以下资料为网络摘抄:

摘自:
http://www.cnblogs.com/Terry-greener/archive/2011/12/02/2271707.html
TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。
向TreeSet中加入的应该是同一个类的对象。TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0
自然排序
自然排序使用要排序元素的CompareTo(Object obj)方法来比较元素之间大小关系,然后将元素按照升序排列。Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现了该接口的对象就可以比较大小。obj1.compareTo(obj2)方法如果返回0,则说明被比较的两个对象相等,如果返回一个正数,则表明obj1大于obj2,如果是 负数,则表明obj1小于obj2。如果我们将两个对象的equals方法总是返回true,则这两个对象的compareTo方法返回应该返回0。
定制排序
自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用Comparator接口,实现 int compare(T o1,T o2)方法。

从上面的引文可以看出,对于集合的排序可以使用元素本身比较大小的方法(前提是实现了Comparable接口的对象);或者去实现Comparator接口的compare()方法来自定义一套比较大小的逻辑。


List:ArrayList、LinkedList

ArrayList

ArrayList是List接口动态数组的实现方式。数组的特点是其中的元素在内存中的地址是连续的。所以ArrayList的优点在于get、set的效率高。缺点是在ArrayList中插入和删除效率较低,由于每插入/删除一项,都需要移动后续所有项的位置.
ArrayList的常用方法包括get、set、size、isEmpty、add、remove、clear、toArray、contains、indexOf、lastIndexOf、ensureCapacity等方法。


LinkedList

LinkedList是采用双向链表实现的。所以它也具有链表的特点,每一个元素(结点)的地址不连续,通过引用找到当前结点的上一个结点和下一个结点,即插入和删除效率较高,只需要常数时间,而get和set则较为低效,
LinkedList的方法和使用和ArrayList大致相同,由于LinkedList是链表实现的,所以额外提供了在头部和尾部添加/删除元素的方法,也没有ArrayList扩容的问题了。另外,ArrayList和LinkedList都可以实现栈、队列等数据结构,但LinkedList本身实现了队列的接口,所以更推荐用LinkedList来实现队列和栈。

相关文章

  • Java基础之集合类

    Java基础之集合类 集合类简单介绍 Java集合是Java提供的工具包,包含了常用的数据结构:集合、链表、队列、...

  • Java基础 浅谈常用的集合类

    “简单不先于复杂,而是在复杂之后.” —— Alan Perlis 推荐链接——http://www.jiansh...

  • Java面试

    一、Java基础: 1、常用的Java类?2、常用的集合,说出五个?3、IO中常用的类,说出五个?4、map是怎么...

  • java文艺复兴

    JAVA 语言基础 理解面向对象OO 常用类 集合 IO 多线程 GUI(??) 网络编程 JAVA WEB (...

  • Java基础(二)

    Java要点2 JAVA 集合类 1.JAVA常用集合类功能、区别和性能 两大类:Collections,Map;...

  • Java并发包之ConcurrentHashMap

    之前整理了一份Java中常用的集合类的基本特性:Java常用集合类图解详细介绍了HashMap:HashMap之浅...

  • 函数的定义和调用

    3.1 创建集合 kotlin没有采用自己的集合类,而是采用的标准的java集合类。在java集合类的基础上新增了...

  • Java集合框架—ArrayList—扩容原理底层源码

    Java.util.ArrayList是Java集合中最常用的类,也是Java开发中最常用的类之一。本篇基于JDK...

  • 高效编程之hashmap你不看就会忘记的知识点

    以前菜得不能看的时候看Java的招聘要求:Java基础扎实,熟悉常用集合类,多线程,IO,网络编程,经常会疑惑,集...

  • 集合概述

    一:集合的UML类图 二:集合工具的分析 (Java集合是java提供的工具) 常用的数据结构: 集合、链表、队列...

网友评论

      本文标题:Java基础 浅谈常用的集合类

      本文链接:https://www.haomeiwen.com/subject/evrggttx.html