Java常用集合区别

一、集合与数组的区别

相同点:
都是用来存储数据的。
不同点:
1.集合带array的,底层由数组实现,还有一部分由其他方式(树、链表等)实现。
2.数组大小固定,而集合没有固定的大小,更方便存储。
3.数组只能放一种类型,集合不考虑泛型可以存多种类型。
4.集合放基本类型是通过装箱拆箱(包装类与基本数据类型的转换)来实现的。(写泛形的时候不能用int,而要用Integer)

二、几种常用集合之间的关系

Map接口自成一系,是以键值对(Key,Value)方式存储数据的,属于双列集合。
Set接口的实现类: HashSet、LinkedHashSet、TreeSet。
List接口的实现类:ArrayList、LinkedList、Vector(线程安全)。
Queue接口的实现类 : LinkedList、PriorityQueue。(没怎么用过,混个脸熟)
Map接口的实现类:HashMap、TreeMap、Hashtable(线程安全)。

三、集合的特性

List 有序,可重复

List接口的常用方法:

> add(int index, T t) //向指定位置添加元素  
> remove(int index) //删除指定元素  
> get(int index)        //获取指定位置的元素  
> set(int index, T t)  //修改指定位置的元素  
> indexOf(T t)          //获取指定元素的位置

ArrayList 底层数据结构是数组,查询快,增删慢。
ArrayList的常用方法都是从List继承来的,就不多说了。
LinkedList 底层数据结构是链表,查询慢,增删快。

LinkedList 的常用方法:

> getFirst() //获取第一个元素  
> getLast() //获取最后一个元素  
> offer(T t) //在最后位置追加元素 
> offerFirst(T t) //在开头位置追加元素  
> offerLast(T t) //在最后位置追加元素  
> removeFirst()//删除第一个元素  
> removeLast() //删除最后一个元素

Vector 底层数据结构是数组,线程安全,效率低。
使用方法和ArrayList基本一样。

Map接口(双列)

> put (K key,V value):把键与值添加到Map集合中  
> remove (K key):删除key对应的值  
> get(K  key):根据指定的键,获取对应的值   
> containKey(K key):判断是否包含指定的键   
> entrySet() :返回Map.Entry型对象,用于遍历。(entry.getKey()/entry.getValue())  
> keySet(Kkey):获取Map集合中所有的Key,存储到set集合中(用于遍历)   
> values(V value):获取Map集合中所有的Value,存储到Collection集合中(用于遍历)

HashMap的常用方法都继承自Map接口,就不细说了。HashMap是最常用的键值对存储容器。

TreeMap

构造器:

TreeMap()//创建一个空TreeMap,keys按照自然排序
TreeMap(Comparator comparator)//创建一个空TreeMap,按照自定义的comparator排序。

Hashtable(线程安全)

与HashMap的异同:

同:Hashtable和HashMap使用方法基本一致。
异:HashMap线程不安全,而Hashtable是线程安全的;HashMap的K和V都可以为null,而Hashtable的K,V都不能为null。

四、总结

1.没有其他要求时,最常用ArrayList、HashMap;
2.不能重复时,用HashSet;
3.需要线程安全时,用Vector、Hashtable。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值