JAVA集合

1.集合关系图

在这里插入图片描述

2.Collection接口

Collection是集合List、Set、Queue的父类接口。

2.1 List接口

List是有序集合。

2.1.1 LinkedList

LinkedList底层是双向链表,插入和删除速度快,随机访问的速度较慢。排列有序,值可以重复,线程不安全。
常用方法:

  1. add(Object obj):向链表末尾添加一个新节点。
  2. add(int index,Object obj):向链表指定位置添加一个新节点。
  3. addFirist(Object obj):向链表表头添加一个新节点。
  4. remove(int index):删除指定位置的节点。
  5. get(int index):得到指定位置的节点。
  6. indexOf(Object obj):返回节点对象在链表中首次出现的位置,如果链表中无此节点的对象则返回-1 。
  7. size():返回链表的长度。
  8. contains(Object obj):判断链表节点对象中是否含有obj。
2.1.2 ArrayList

ArrayList底层是数组,当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进行复制、移动、代价比较高。因此,不适合插入和删除,但是它随机访问速度快。排列有序,值可以重复,线程不安全。当ArrayList的容量不够时
自动扩容(原来容量*1.5+1)。
常用方法:

  1. add(Object obj):向链表末尾添加一个新节点。
  2. add(int index, Object obj):向链表指定位置添加一个新节点。
  3. clear():从链表中删除所有元素。
  4. remove(Object obj):移除ArrayList中首次出现的指定元素,存在则移除并返回true,否则返回false。
  5. get(int index):得到指定位置的节点。
  6. toArray():将链表转换为一个数组。
  7. set(int index, Object obj):将链表中指定位置上的元素替换成新元素。
  8. contains(Object obj):判断链表节点对象中是否含有obj。
  9. isEmpty():返回true表示链表中没有任何元素。
  10. size():返回链表长度。
2.1.3 Vector

Vector底层也是数组,他是线程安全的,所以访问速度比Array List慢。当Vector的容量不够时,自动扩容一倍的容量。
常用方法与ArrayList类似。

2.2 Set接口

Set无序且不能重复。

2.2.1 HashSet

HashSet底层是哈希表,HashSet 通过 hashCode 值来确定元素在内存中的位置。一个 hashCode 位置上可以存放多个元素。元素的哈希值是通过元素的hashcode 方法来获取的, HashSet 首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals 方法 如果 equls 结果为 true ,HashSet 就视为同一个元素。如果 equals 为 false 就不是同一个元素。
在这里插入图片描述
如图 1 表示 hashCode 值不相同的情况;图 2 表示 hashCode 值相同,但 equals 不相同的情况。
常用方法:

  1. add(Object obj):向Set集合中添加元素,添加成功返回true,否则返回false。
  2. size():返回Set集合中的元素个数。
  3. isEmpty():如果Set不包含元素,则返回 true ,否则返回false。
  4. clear():移除此Set中的所有元素。
  5. contains(Object obj):如果Set包含指定的元素,则返回 true,否则返回false。
  6. remove(Object obj) : 删除Set集合中的元素,删除成功返回true,否则返回false。
  7. iterator() :返回在此Set中的元素上进行迭代的迭代器。
2.2.2 TreeSet

TreeSet底层是二叉树,每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。Integer 和 String 对象都可以进行默认的 TreeSet 排序,而自定义类的对象是不可以的,自己定义的类必须实现 Comparable 接口,并且覆写相应的 compareTo()函数,才可以正常使用。
常用方法:

  1. add(Object obj):向Set集合中添加元素,添加成功返回true,否则返回false。
  2. size():返回Set集合中的元素个数。
  3. isEmpty():如果Set不包含元素,则返回 true ,否则返回false。
  4. contains(Object obj):如果Set包含指定的元素,则返回 true,否则返回false。
  5. remove(Object obj) : 删除Set集合中的元素,删除成功返回true,否则返回false。
  6. ceiling​(Object obj):返回此set中大于或等于给定元素的最小元素。
  7. floor(E e):返回此set中小于或等于给定元素的最大元素。
  8. lower​(E e):返回此集合中的最大元素严格小于给定元素。
2.2.3 LinkedHashSet

LinkedHashSet 底层使用 LinkedHashMap 来保存所有元素,它继承HashSet,在相关操作上与父类 HashSet 的操作相同,直接调用父类 HashSet 的方法即可。输出LinkedHashSet集合中的元素时,元素的顺序和添加顺序一致。

2.3 Queue

先入先出,添加元素只能在队尾,移除只能在队首。LinkedList实现该接口。
常用方法:

  1. add(Object obj):添加一个元素到队尾,失败抛异常。
  2. remove():获取队首的元素,并从队列中移除,失败抛异常。
  3. element():获取队首的元素,但不从队列中移除,失败抛异常。
  4. offer(Object obj):添加一个元素到队尾
  5. poll():获取队首的元素,并从队列中移除
  6. peek():获取队首的元素,但不从队列中移除

3.Map接口

3.1 HashMap

HashMap基于数组、链表、红黑树,无序,访问速度快。HashMap的键只允许一条为null,值不限制。非线程安全,如果需要满足线程安全,可以用 Collections 的 synchronizedMap 方法使HashMap 具有线程安全的能力,或者使用 ConcurrentHashMap。

  1. put(K key, V value) 将键(key)/值(value)映射存放到Map集合中。
  2. get(Object key):返回指定键所映射的值,没有该key对应的值则返回 null。
  3. size():返回Map集合中数据数量。
  4. clear():清空Map集合。
  5. isEmpty ():判断Map集合中是否有数据,如果没有则返回true,否则返回false。
  6. remove(Object key):删除Map集合中键为key的数据并返回其所对应value值。
  7. keySet():返回Map集合中所有key组成的Set集合。
  8. containsKey(Object key):判断集合中是否包含指定键,包含返回 true,否则返回false。
  9. entrySet():将Map集合每个key-value转换为一个Entry对象并返回由所有的Entry对象组成的Set集合。
    3.4.3. HashTable(线程安全)
3.2 Hashtable

很多映射的常用功能与 HashMap 类似,不同的是它承自 Dictionary 类,并且是线程安全的,任一时间只有一个线程能写 Hashtable,并发性不如 ConcurrentHashMap,因为 ConcurrentHashMap 引入了分段锁。Hashtable 不建议在新代码中使用,不需要线程安全的场合可以用 HashMap 替换,需要线程安全的场合可以用 ConcurrentHashMap 替换。Hashtable键和值都不能为null。

3.3 TreeMap

TreeMap 实现 SortedMap 接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用 Iterator 遍历 TreeMap 时,得到的记录是排过序的。如果使用排序的映射,建议使用 TreeMap。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值