java集合总结

java集合

集合

集合体系包括Collection 和 Map 两种体系
在这里插入图片描述

Collection

List Set Queue实现Colletion接口

List 有序,可重复

ArrayList

构造一个初始容量为 10 的空列表

优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
LinkedList 构造一个空列表。
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高

Set 无序,唯一

HashSet

使用默认初始容量 (16) 和负载因子 (0.75) 构造一个新的空链接散列集底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals()

LinkedHashSet

使用默认初始容量 (16) 和负载因子 (0.75) 构造一个新的空链接散列集
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一

TreeSet

构造一个新的空树集,根据其元素的自然顺序排序。底层数据结构是红黑树。(唯一,有序)

队列queue的实现
java中虽然有Queue接口,单java并没有给出具体的队列实现类,而Java中让LinkedList类实现了Queue接口,所以使用队列的时候,一般采用LinkedList。因为LinkedList是双向链表,可以很方便的实现队列的所有功能。

Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。

java中定义队列 一般这样定义: Queue queue = new LinkedList();

Queue <Integer> queue = new LinkedList <Integer>();
queue.offer(1);
queue.offer(2);
queue.offer(3);
System.out.println(queue);
System.out.println(queue.peek());
queue.poll();
System.out.println(queue);
List子类常用方法

ArrayList的常用方法

增add()
删 remove()
改set()
查 contains()
查 indexOf()
返回第一次找到的索引 get()
计算长度size()
删除所有clear()
是否为空isEmpty()
按条件删除removeif()
遍历forEach()
排序sort()
// 使用增强for循环进行遍历

  for (Object value : list) { 
          System.out.println(value);  
       }

LinkedList的方法

增add()
删 remove()
改set()
查 contains()
查 indexOf()
返回第一次找到的索引 get()
计算长度size()
删除所有clear()
是否为空isEmpty()
按条件删除removeif()
遍历forEach()
// 使用增强for循环进行遍历
for (Object value : list) { System.out.println(value); }

Set子类常用方法

hashSet

增add()
删 remove()
改 没有
查 contains()
查 indexOf()
返回第一次找到的索引 get()
计算长度size()
删除所有clear()
是否为空isEmpty()
按条件删除removeif()
遍历forEach()
// 使用增强for循环进行遍历

  for (Object value : list) {         
  System.out.println(value);      }

LinkHashSet方法

增add()
删 remove()
改 没有
查 contains()
查 indexOf()
返回第一次找到的索引 get()
计算长度size()
删除所有clear()
是否为空isEmpty()
按条件删除removeif()
遍历forEach()
// 使用增强for循环进行遍历

  for (Object value : list) {         
  System.out.println(value);      }

TreeSet方法

增add()
删 remove()
改 没有
查 contains()
查 indexOf()
返回第一次找到的索引 get()
计算长度size()
删除所有clear()
是否为空isEmpty()
按条件删除removeif()
遍历forEach()
// 使用增强for循环进行遍历

for (Object value : list) {         
System.out.println(value);      }
Map

HashMap、TreeMap和HashTable实现Map接口

HashMap

构造一个HashMap具有默认初始容量 (16) 和默认负载因子 (0.75)的空

基于哈希表的Map接口实现。此实现提供所有可选的映射操作,**并允许 null值和null**键。(HashMap 该类大致相当于Hashtable,除了它是非同步的并允许空值。)该类不保证映射的顺序;特别是,它不保证订单会随着时间的推移保持不变。

此实现为基本操作(getput)提供恒定时间性能,假设散列函数在存储桶中正确分散元素。集合视图上的迭代需要的时间与HashMap实例的“容量” (桶的数量)加上它的大小(键值映射的数量)成正比 。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或负载因子太低),这一点非常重要。

LinkedHashMap

​ LinkedHashMap是hashMap的子类LinkedHashMap使用**默认初始容量 (16) 和 加载因子 (0.75)**构造一个空的插入排序实例。

​ 接口的哈希表和链表实现Map,具有可预测的迭代顺序。此实现的不同之处 HashMap在于它维护一个贯穿其所有条目的双向链表。这个链表定义了迭代顺序,通 常是将键插入到映射中的顺序插入顺序)。请注意,如果将键重新插入到映射中,则 插入顺序不会受到影响。

HashTree

**使用其键的自然顺序构造一个新的空树映射。**键非空值可空

基于红黑树的实现。根据其键的[自然顺序进行排序或者根据创建时提供的[顺序进行排序]具体取决于使用的构造函数。

此实现提供了保证的log(n)的时间成本,为 containsKeygetputremove 操作。算法是对 Cormen、Leiserson 和 Rivest 的算法简介中的算法的改编。
HashTable

构造一个具有默认初始容量 (11) 和负载因子 (0.75) 的新的空哈希表。
这个类实现了一个哈希表,它将键映射到值。任何非null对象都可以用作键或值。
要从哈希表中成功存储和检索对象,用作键的对象必须实现hashCode 方法和equals方法。
的实例Hashtable有两个影响其性能的参数:初始容量负载因子。的 容量是多少在哈希表,和 初始容量是简单地在创建哈希表中的时间的能力。请注意,哈希表是开放的:在“哈希冲突”的情况下,单个存储桶存储多个条目,必须按顺序搜索。该客座率是衡量哈希表在其容量自动增加之前允许达到多满的指标。初始容量和负载因子参数只是对实现的提示。关于何时以及是否调用 rehash 方法的确切细节取决于实现。

通常,默认负载因子 (.75) 在时间和空间成本之间提供了良好的折衷。较高的值会减少空间开销,但会增加查找条目的时间成本(这反映在大多数 Hashtable操作中,包括getput)。

Map子类常用方法

HashMap方法

增**[put([K] key, [V] value)
删remove(Object key)
改 没 但可以添加key相同,但value不同的值,来实现改value
查 value() keySet() containsKey(key) containsValue(value) entrySet()返回key-value
长度 size()
// 遍历

for (Object entry:hashMap.entrySet()){
			System.out.println(entry);
		}

treeMap方法

增**put(K key, [V]value)
删remove(Object key)
改 没 但可以添加key相同,但value不同的值,来实现改value
查 value() keySet() containsKey(key) containsValue(value) entrySet()返回key-value
长度 size()
// 遍历

for (Object entry:hashMap.entrySet()){ 
           System.out.println(entry);        }

Map子类间的比较
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值