Java集合学习笔记

  学习了这么久的Java,还从来没有总结过相关的知识,java中的集合类就是其中的一个重点。主要接口有两个,Collection和Map。其中大家所熟知的List,Set就是Collection的子接口,而HashMap和Hashtable就是Map的实现。由于Collection是继承自Iterator的,所以,List和Set都可以使用迭代器。其设计也是一种迭代器模式。下面我们来具体看看java中的集合类。

1、List

  List只是一个抽象的接口,要使用它,就必须有实现类才行,那么它有哪些实现类呢?
  List的实现类有ArrayList、LinkedList、Vector、Stack(这里只列举常用的,Queue也是Collection的子接口,这里不做讨论)都是List的实现类。我们来看看他们的区别:

1) 线程安全性

  ArrayList和LinkedList插入和删除等操作都是没有加锁的,所以是线程不安全的。而Stack是继承自Vector,且Vector是线程安全的,因此Stack也是线程安全的。

2) 随机访问性

  由于ArrayList、Vector、Stack都是继承自抽象类AbstractList,并实现了RandomAccess接口。可以随机访问列表中的数据,并且使用for(int i = 0; i < arr.size(); i++ )遍历时,效率比使用迭代器要高。 而LinkedList继承自抽象类AbstractSequentialList,不具备随机访问性,其使用迭代器访问。虽然LinkedList也有get(int index)方法,但是,其内部也是从开始或者结尾遍历,找到该元素的,并不是随机访问。由于LinkedList还实现了Deque接口,所以可以将LinkedList当做双向队列来使用。当然,Stack虽然可以随机访问,但Stack作为栈,使用时还是使用push和pop方法比较好,如果需要随机访问的话,直接使用Vector就可以了。
  

2、Set

  Set的实现类主要有HashSet、LinkedHashSet、TreeSet,其中,LinkedHashSet是继承自HashSet。要注意的是,使用Set的时候,一定要重写hashCode和equals()方法。因为,Set就是为了提高元素的查找效率的,其优化的地方就是根据hashCode方法来判断的,如果不覆写hashCode方法,那么,其效率和List就没有区别了,因为Object类中,hashCode默认是返回的0。

1) List和Set的区别

  List放入元素是有顺序的,元素可以重复。而Set放入元素是没有顺序的,元素不可以重复。当然,LinkedHashSet是有顺序的。List内部数据是使用数组实现的(LinkedList除外),而Set内部是使用Map实现的。将添加向Set的元素作为map的key,而其值都是Set中的一个静态Object对象。

2) HashSet、LinkedHashSet、TreeSet的区别

  HashSet和TreeSet都是继承自AbstractHashSet,但TreeSet还实现了SortedSet接口。
  HashSet是无序的,具有快速查找的优点。
  LinkedHashSet具有快速查找的优点,还通过链表保证了元素的顺序。
  TreeSet是有序的,内部通过TreeMap实现。而TreeMap是使用红黑树排序的,所以TreeSet的排序算法也是红黑树。

3、Map

  Map的实现类主要有HashMap、LinkedHashMap、TreeMap、Hashtable、WeakHashMap、IdentityHashMap。除了LinkedHashMap继承自HashMap外,其余的都是直接继承自AbstractHashMap,并且TreeMap还实现了SortedMap接口。要注意的是对于同一个Map多次调用keySet所得到的Set集合都是同一个,如果一个Set集合改变,那么Map及其他Set都会改变。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值