Java集合类概述

Java集合类概述

本文主要简要梳理常用java集合类,自己在日常编程中用的比较多,加深理解,他们所属包:java.util

  • List
  • Map
  • Set

List

首先要明确,List是接口,该接口继承了Collection接口,这个可以通过查阅java API文档。 —— [ java API ]

代码举例说明,请进入Java集合类之List性能比较

List接口三大常用实现类:ArrayList、LinkedList、Vector

结构比较:

实现类 数据结构 同步状态
ArrayList 动态数组 不同步
LinkedList 链表 不同步
Vector 动态数组 同步

相对性能比较:

实现类
ArrayList 开销大 开销大 相对快
LinkedList 开销小 开销小
Vector 开销大 开销大

具体方法比较:

  • ArrayList

    • 基本方法:add, remove, get, set, size, contains
    • 注意要点:indexOf(返回第一个对象下标),lastIndexOf(返回最后一个对象小标);如需要同步,需要自行添加同步处理。
    • 优势所在:遍历和随机查找速度快。
  • LinkedList

    • 基本方法:add, remove, get, set, size, contains
    • 注意要点:高效操作对象方法addFirst,addLast,getFirst,getLast;如需要同步,需要自行添加同步处理。
    • 优势所在:新增删除速度快。
  • Vector

    • 基本方法:add, remove, get, set, size, contains
    • 注意要点:提供同步功能。

Map

首先要明确,Map是接口,用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复。这个可以通过查阅java API文档。 —— [ java API ]

代码举例说明,请进入Java集合类之Map

Map接口两大常用实现类:HashMap、TreeMap

结构比较:

实现类 数据结构 优势
HashMap 散列表 插删快
TreeMap 红黑树 内部排序

补充说明:

  • HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap是最好的选择。

  • TreeMap取出来的是排序后的键值对。插入、删除需要维护平衡会牺牲一些效率。但如果要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。

Set

首先要明确,Set是接口,该接口继承了Collection接口。相对于上面两种类型集合类,Set不保存重复元素。这个可以通过查阅java API文档。 —— [ java API ]

代码举例说明,请进入Java集合类之Set

Set接口两大常用实现类:HashSet、TreeSet、LinkedHashSet

补充说明:

  • HashSet使用的是复杂的哈希码来管理元素,使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。会根据hashcode和equals来判断是否是同一个对象,如果hashcode一样,并且equals返回true,则是同一个对象,不能重复存放。

  • TreeSet也不能存放重复对象,但是TreeSet会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。

    • 自然排序:TreeSet要添加哪个对象就在哪个对象类上面实现java.lang.Comparable接口,并且重写comparaTo()方法,返回0则表示是同一个对象,否则为不同对象。
    • 客户排序:建立一个第三方类并实现java.util.Comparator接口。并重写方法。定义集合形式为TreeSet ts = new TreeSet(new 第三方类())。
        
  • LinkedHashSet按照插入顺序保存对象,同时还保存了HashSet的查询速度。

你可能感兴趣的:(java,api,ArrayList,LinkedList)