Java集合类使用总结——Java数据类型(二)

概述

ArrayList、Hashmap、Vector等集合类型,是在应用程序开发中经常使用到的数据类型。在使用集合类时,我们究竟使用那种数据类型来定义我们的变量,就要了解其实现机制,选择性能最好的集合类完成定义。同时java招聘的面试题中也会常问问题,以下对java集合类中内容做以总结,提供大家参考。

Collection相关类

Collection接口继承Iterable接口,每种Collection都支持迭代器进行遍历。List和Set都是继承了Collection的子接口。区别是List集合中的元素可重复,Set中的元素不可以重复;List集合中的元素有序,Set中的元素可以无序
在这里插入图片描述
1. List:List的具体类包括:具体类包括Vector、ArrayList、LinkedList和Stack;
ArrayList的底层数据结构是数组,查询快,增删慢,效率高。缺点: 线程不安全
Vector底层数据结构是数组,查询快,增删慢,线程安全
Stack是Vector的子类,继承了Vector中的方法和特点,具有先进后出的特点。
LinkedList:底层数据结构是链表,查询慢,增删快。缺点: 线程不安全
使用场景:假如要定义一个有序的集合变量,可以由以上三种类型中选取,当集合中的数据频繁进行增删操作,使用LinkedList;当涉及多线程,数据同步时使用Vector;不知道用哪个时选ArrayList。

2.Set:Set具体类包括HashSet、TreeSet、LinkedHashSet。
HashSet:唯一,无序,底层数据结构是哈希表,什么,哈希表,哈希表不是<key,value>键值对?,是的,HashSet中的哈希表,其中数据存在key中,value是一个的Object。注意看源码:

public class HashSet<E>  extends AbstractSet<E>  
    implements Set<E>, Cloneable, java.io.Serializable  {  
    static final long serialVersionUID = -5024744406713321676L;  
  
    // 使用哈希表来保存HashSet中所有元素。  
    private transient HashMap<E,Object> map;     
    //final修饰只能赋一次值,PRESENT
    private static final Object PRESENT = new Object();  
    //构造函数
    public HashSet() {  
      map = new HashMap<E,Object>();  
    }  
    
    //每次增加值时,value值都为PRESENT
    public boolean add(E e) {  
    return map.put(e, PRESENT)==null; 
    }
 }

LinkedHashSet是HashSet的子类,继承了其功能,并对其进行扩展,具有先进先出(FIFO)功能,底层数据结构是链表和哈希表。
TreeSet:有序不重复,底层数据结构是红黑树。

使用场景:如果需要的是一个排序集合(不重复),请选择TreeSet,如果需要一套能够存储插入顺序的集合,使用LinkedHashSet;没有条件,不知道用哪个时选HashSet

Map相关类

Map表示存储键值对;具体实现类包括:HashMap、HashTable、TreeMap,这三个类型就是我们常用的三种类型。Map相关类图如下:
在这里插入图片描述

TreeMap是有序的,实现数据结构是红黑树,具体顺序需要实现comparator接口,时间复杂度为log(n)。
而HashMap和HashTable是无序的。Hashtable的方法是同步的,HashMap的方法不是同步的,HashMap的性能优于Hashtable。
使用场景:加入应用中我们不断加入数据,输出时需要按照一定规则排序,则使用TreeMap。否则使用HashMap或HashTable,如果多线程并发性选择HashTable,否则选择HashMap。缺省使用HashMap。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值