Java基础之集合框架

概述

Java集合工具包包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*(除了并发集合java.util.concurrent);其总体框架图如下所示:

Collections

  • 设计了三个核心接口:java.util.Collection ,java.lang.Iterable,java.util.Map;
  • 一般情况下,我们都是配合泛型来使用 Collections;
  • 通常情况下,为了更好的使用 Collections,我们需要覆盖equals()和 hashCode()。

List & Set & Map对比

重复对象

List 允许,Set 不允许,而Map中键对象必须唯一。

排序

List 有序,Set 一般无序,而Map也没有规定顺序。

  • 某些 Set 实现比如 LinkedHashSet 还是保持了每个元素的插入顺序。
  • 此外 SortedSet 的实现 TreeSet , SortedMap的实现 TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。

NULL值

List允许多个null值,Set允许一个null值,Map可以有多个null值和最多一个null键。

  • Hashtable 既不允许 null 键也不允许 null 值。

流行实现

Collection(单列)

List(有序,可重复)
ArrayList

底层数据结构是数组,查询快,增删慢。线程不安全,效率高。

Vector

底层数据结构是数组,查询快,增删慢。线程安全,效率低.

LinkedList

底层数据结构是链表,查询慢,增删快。线程不安全,效率高。

Set(无序,唯一)
HashSet

底层数据结构是哈希表。线程不安全,效率高,基于HashMap实现。

  • 唯一性保证

依赖两个方法:hashCode()和equals()

TreeSet

底层数据结构是二叉树。线程不安全,效率高,基于TreeMap实现。

  • 唯一性保证

因为TreeSet内部的功能都是转发到TreeMap来实现,因此是调用TreeMap的规则。
故通过compare(Object o)的返回值是否为0来判断是否为同一元素。

  • 排序性保证

compare() == 0,元素不入集合。
compare() > 0 ,元素入右子树。
compare() < 0,元素入左子树。
1. 自然排序(元素具备比较性): 实现Comparable接口
2. 比较器排序(集合具备比较性): 实现Comparator接口

Map(双列 底层结构是针对键有效,跟值无关)
HashMap

底层数据结构是哈希表。线程不安全,效率高。

  • 唯一性保证

依赖两个方法:hashCode()和equals()

Hashtable

底层数据结构是哈希表。线程安全,效率低。

  • 唯一性保证

依赖两个方法:hashCode()和equals()

TreeMap

底层数据结构是二叉树。线程不安全,效率高。

  • 唯一性保证

通过compare(Object o)的返回值是否为0来判断是否为同一元素。

  • 顺序保证

    1. 自然排序(元素具备比较性): 实现Comparable接口
    2. 比较器排序(集合具备比较性): 实现Comparator接口

Comparable与Comparator

都是Java中用于实现对象的比较、排序的接口。

//Comparable
public class Student implements Comparable{
public int compareTo(Student another) {}
}
Collections.sort( studentList )

//Comparator
public class Student{}

class StudentComparator implements Comparator { 
public int compare(Student one, Student another) {}
}

Collections.sort( studentList , new StudentComparator());

集合选择

是否键值对?
        是:Map
            是否对键排序?
                是:TreeMap
                否:HashMap
            没有明确要求的情况下,使用HashMap。

        否:Collection
            是否唯一
                是:Set
                    是否对元素进行排序?
                        是:TreeSet
                        否:HashSet
                    没有明确要求的情况下,使用HashSet
                否:List
                    是否要安全:
                        是:Vector或者
                            List list = Collections.synchronizedList(new ArrayList());

                        否:ArrayList,LinkedList
                            查询多:ArrayList
                            增删多:LinkedList
                    没有明确要求的情况下,使用ArrayList

集合脑图

Collections

脑图地址: http://www.xmind.net/m/UPWK

参考:
Difference between Set, List and Map in Java - Interview question
Java集合干货系列-集合总体大纲

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值