谈谈你对容器(集合)的理解

集合框架的概念

由于程序语言在使用中可能会对多个数据进行存储,所以需要用一种东西来放置以便统一使用或者提取,于是诞生了集合框架这种容器。它能够给用户提供元素的增加,删减,替换和查找的功能,让操作更加方便简洁而且效率更高。

与数组的对比:

1、数组的长度固定,集合长度可变;

2、数组只能通过下标访问元素,下标类型只能是数字型,而有的集合可以通过任意类型查找所映射的具体对象。

集合框架的种类

集合框架主要由几个重要的接口组成:collection,map和iterator。

  • Collection接口: 是所有集合类的根接口,其又由几个子接口组成:List接口,Set接口,Queue接口。

    • List接口由两个类来进行实现:ArrayList类和LinkedList类。

    • Set接口由三个类来进行实现:HashSet类和TreeList类。

    • Queue接口下有一个子接口:Deque接口,并且也由LinkedList类实现。

  • Map接口:

    • Map提供了一种映射关系,元素是以键值对(key-value)的形式存储的,能根据key快速查找value;

    • Map中的键值对以Entry类型的对象实例形式存在;

    • key值不能重复,value值可以重复;

    • key对value是多(一)对一的关系;

    • Map接口提供了返回key值集合、value值集合、Entry值集合,的方法;

    • Map支持泛型,形式如:Map<K,V>

      • HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现;

      • HashMap中的Entry对象是无序排列的;

      • Key值和value值都可以为null,但是一个HashMap只能有一个Key值为null的映射(Key值不可重复)

  • HashMap、HashTable、TreeMap的区别

    • HashMap是键值对的方式存储的,但不能保证次序,单线程;

    • HashTable与HashMap存储方式相同,但是是线程安全的;

    • TreeMap是有序的键值对,基于红黑树排序。

  • Iterator接口: 是一种迭代器,可以对集合里面的元素进行遍历,由一个ListIterator继承

每种集合的特点

List集合的特点:其中的元素是允许重复的,按照添加的先后顺序进行排列,所以List是有索引的。

List接口:

  • 有序,可重复

  • 有序:存取顺序一致

  • 可重复:可以存储重复的元素

  • addFirst(Object obj):在头部添加元素

  • addLast(Object obj):在尾部添加元素

  • removeFirst():删除头部元素

  • removeLast():删除尾部元素

  • getFirst():获取头部元素

  • getLast():获取尾部元素

Set集合的特点:其中的元素是不允许重复的,但是无序的,所以Set是没有索引的。

1、特点:

  • 无序:没有任何前后的分别,所有的元素没有位置的概念,所有的元素都在集合中 没有索引:集合中没有任何位置,元素也就没有位置的属性 不能重复:没有位置的区分,相同值的元素没有任何分别,所以不能重复

  • 2、实现类

  • HashSet (实现类)

  • HashSet存储jdk提供的类型的元素

  • HashSet存储jdk提供的类型的元素,发现直接保证了元素的唯一性,值相同的元素都去掉了

  • HashSet存储自定义类型的元素

  • hashCode方法

  • HashSet保证元素唯一性原理的总结

    • 某个对象obj,在即将要存储到HashSet集合的时候,首先计算obj的hashCode值

    • 在集合中的所有元素的哈希值,都和obj的哈希值不同,说明在集合中不存在obj,可以直接将obj存储到HashSet中

    • 在集合中有若干元素的哈希值,和obj的哈希值相同,并不能说明obj已经存在于集合中,需要使用equals判断obj是否和那些与自己哈希值相同的元素是否相等

    • 如果这些元素所有的和obj比较equals之后,都不相等,那么就说明obj不存在于集合中,可以将obj存储到HashSet中

    • 如果这些元素有任意一个和obj比较equals之后,发现相等,那么就说明obj已经存在于集合中,所以obj就不能存储,存储失败。

保证元素唯一性的操作

1、重写hashCode

2、重写equals方法:

3、最终操作:

使用快捷键,直接全部生成:alt + shift + s h LinkedHashSet(实现类)

是HashSet的一个子类,和HashSet保证元素唯一的原理相同。

既需要保证元素的唯一,又需要保证原来的顺序,就可以考虑LinkedHashSet类型 3、存储特点:

(1)相同的元素无法存储进Set集合 (2)集合本身不保证顺序:存储的顺序和取出的顺序不保证一致 4、Set集合的遍历

1、没有自己特有的方法,只能使用Collection接口中定义的方法,只能使用Collection的遍历方式 2、第三种:迭代器 3、第四种:增强for循环

Map集合的特点:Map中保存的是键值对。

  • HashMap的key值的hashCode和equals保证元素唯一性。

  • LinkedHashMap通过哈希表跟链表实现,具有可预知的迭代顺序

TreeMap集合的特点:不仅可以保证key不重复,还可以对value数据进行排序。(但是往往HaseMap的速度更快)

存放时:

  • List以特定的索引(有顺序的存放)来存放元素,可以有重复的元素

  • Set存放元素是无序的,而且不可重复

  • Map保存键值对的映射,映射关系可以是一对一(键值)或者多对一,需要注意到的是:键无序不可重复,值可以重复

取出时:

  • List取出元素for循环,foreach循环,Iterator迭代器迭代

  • Set取出元素Iterator迭代器迭代

  • Map取出元素需转换为Set,然后进行Iterator迭代器迭代,或转换为Entry对象进行Iterator迭代器迭代

猜你喜欢

转载自blog.csdn.net/FanZaiYo/article/details/121384940