java的集合

集合概述

javva集合大致可以分为Set、List、Queue、Map,四种体系。其中,Set代表无序、不可重复的集合;List代表有序、重复的集合;Map代表具有映射关系的集合;java5增加的Queue代表一种队列集合实现。所有的集合类都位于java.util包下。

java的集合类主要由两个接口派生出来:Collection和Map。
1.Collection集合体系的继承树.png

单列集合

java.util.Collection是单列集合的顶层父接口,它有2个常用的子接口:List和Set.
List集合中的元素有序,并且可以重复,元素有索引;Set集合中的元素无序,并且不可以重复(唯一),元素无索引。

  • Collection集合中的常用方法:

    • public boolean add(E e):把给定的对象添加到当前集合中
    • public void clear():清空集合中所有的元素
    • public boolean remove(E e):把给定的对象在当前集合中删除
    • public boolean contains(Object obj):判断当前集合中是否包含给定的对象
    • public boolean isEmpty():判断当前集合是否为空
    • public int size():返回集合中元素的个数
    • public Object[] toArray():把集合中的元素,存储到数组中
  • List集合除了有Collection中的常用方法外,还有以下常用方法:

    • public void add(int index, E element):将将指定的元素,添加到该集合中的指定位置上
    • public E get(int index):返回集合中指定位置的元素
    • public E remove(int index):移出列表中指定位置的元素,返回的是被移除的元素
    • public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值是更新前的元素。
  • LinkedList类除了拥有List接口中的方法,还有以下方法:

    • public void addFirst(E e):将指定元素插入此列表的开头
    • public void addLast(E e):将指定元素添加到此列表的结尾
    • public E getFirst():返回此列表的第一个元素
    • public E getLast():返回此列表的最后一个元素
    • public E removeFirst():移除并返回此列表的第一个元素
    • public E removeLast():移除并返回此列表的最后一个元素
    • public E pop():从此列表所表示的堆栈处弹出一个元素。就是removeFirst()
    • public void push(E e):将元素推入此列表所表示的堆栈。就是addFirst()
  • Set集合,特点:元素无索引,元素不能重复,无序。常用的实现类有HashSet、LinkedHashSet(继承了HashSet)、TreeSet。

  • HashSet

    • 特点是:不能保证元素的排列顺序,顺序可能与添加顺序不同;HashSet不是同步的;集合元素值可以为null.
    • 存储数据的结构是哈希表结构,在jdk8以前是数组+链表;在jdk8以后:当链表元素个数没有超过8个就是数组+链表,链表元素个数超过8个就是数组+链表+红黑树
    • 保证元素唯一的原理:主要依赖元素的hashCode()和equals()方法:
      1. 当集合存储某个元素,就会调用该元素的hashCode()方法计算该元素的哈希值;
      2. 判断该哈希值对应的位置上,是否有相同哈希值的元素;
      3. 如果该位置上没有相同哈希值的元素,那么久直接存储
      4. 如果该位置上有相同哈希值的元素,那么就产生了哈希冲突
      5. 如果产生了哈希冲突,就会调用该元素的equals()方法与该位置上所有的元素一一进行比较:如果比较完成后,该位置上任意一个元素与该元素相等,那么就不存储;如果比较完成后,该位置上没有一个元素与该元素相等,那么就存储
  • LinkedHashSet:继承了HashSet,所以也是根据元素的hashCode值来决定元素的存储位置,但它同事使用链表来维护元素的次序,这样使得元素看起来是以插入顺序保存的。是链表和哈希表组合的一个数据结构,依然不允许集合元素重复。

  • TreeSet:是Set接口的一个实现类,底层依赖于TreeMap,是一种基于红黑树的实现。

    • 特点是元素唯一,元素没有索引,集合元素处于排序状态。使用元素的自然顺序对元素进行排序(要求集合元素所属的类必须实现Comparable接口,重写compareTo方法,在其中书写排序规则),或者根据创建TreeSet时提供的Comparator比较器进行排序,具体取决于使用的构造方法。空参构造就是自然排序。有参构造,参数就是比较器,是按比较器排序。

双列集合

2.Map集合体系的继承树.png

Map<K, V> 接口:也称Map集合,是所有双列集合的顶层父接口。K用来限制键的类型,V用来限制值的类型。

  • Map集合特点:
    1. Map集合存储元素是以键值对的形式存储,也就是说每一个键值对都有键和值
    2. 通过键取值
    3. Map集合中的键不能重复,如果键重复了,那么值就会覆盖
    4. Map集合中的值是可以重复的

Map接口中常用方法:

  1. public V put(K key, V value):把指定的键与指定的值添加到Map集合中,返回被替换的值,如果没有就返回null
  2. public V remove(Object key):把指定的键 所对应的键值对元素在Map集合中删除,返回被删除的元素的值
  3. public V get(Object key):根据指定的键,在Map集合中获取对应的值,没有就返回null
  4. public boolean containsKey(Object key):判断该集合中是否有此键
  5. public boolean containsValue(Object value):判断该集合中是否有此值
  6. public int size():获取集合中键值对的个数
  7. public Set<K> keySet():获取Map集合中所有的键,存储到Set集合中
  8. public Collection<V> values():获取Map集合中所有的值,存储到Collection集合中
  9. public Set<Map.Entry<K, V>> entrySet():获取到Map集合中所有的 键值对对象 的集合(Set集合)。Entry<K, V>表示键值对对象类型。由于Entry<K, V>是Map接口的内部接口,所以在外部使用的时候需要写成Map.Entry<K, V> 。 (外部要方位成员内部类:外部类.内部类)。Entry中的常用方法:1、K getKey():获取键值对对象包装的键;2、V getValue():获取键值对对象包装的值

Map的遍历:方式1、键找值;方式2、键值对方式
方式1:键找值方式

1. 获取map集合中所有的键,keySet()方法
2. 遍历获取到的所有键
3. 根据键找值

方式2:根据键值对对象的方式

1. 获取所有键值对对应的所有键值对对象
2. 循环遍历所有键值对对象
3. 使用键值对对象获取键和值,getKey()和getValue() 

HashMap集合,根据hashCode和equals方法保证键唯一,类似于单列集合中的HashSet。

TreeMap集合,键唯一,可以对键值对进行排序。构造方法TreeMap()是按照默认规则对键记性排序,要求键所属的类实现Comparable接口,重写compareTo方法,在该方法中书写默认排序规则。构造方法TreeMap(Comparator<? super K> comparator)是按照指定规则对键进行排序。类似于单列集合中的TreeSet。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天在看了好多个集合帖子后发现讲的都是一半一半的,这下就逼死我这个强迫症患者了.于是自己写点,有不足之处还望各位道...
    迷迷糊糊m阅读 255评论 0 0
  • 「我是大厂面试官」—— Java 集合,你肯定会被问到这些 文章收录在 GitHub JavaKeeper ,N线...
    JavaKeeper_海星阅读 444评论 0 1
  • Java集合总结 上图有些错误,Deque是继承Queue的,而不是Collection;且LinkedList没...
    LJH_9442阅读 325评论 0 1
  • 集合分类 Collection集合 单列集合, 直接存储对象的引用 Map集合 双列集合, 使用key-value...
    一介星辰阅读 334评论 0 0
  • 集合框架体系概述 为什么出现集合类?方便多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方法. 数组...
    acc8226阅读 921评论 0 1

友情链接更多精彩内容