集合学习总结二

Hase表原理

简单的说他是通过一种算法来计算哈希值,类似于我们获取到一个数据然后给他取余数 被除数是散列表的表长。这样优势在于 存取速度快。但同时有一个问题就是哈希冲突。简单来说就是我们100%9=1 10%=1 这两个算下来的哈希值一样。这时候就需要考虑 怎么放置数据。

解决哈希冲突:首先判断两个元素是否是同一个对象。底层比较是通过equal 方法比较的 ,相同的话不会插入到表里,不同的话 他会有好多种算法在继续算出他的哈希值,其中有一种叫做链地址法(拉链法) 它类似与链表。前一个元素里放着下一个元素的地址。如下图:

HaseSet :内部使用Hase表结构 不保证顺序,不同步。使用Equal 和haseCode 来比较对象是否相同。取出只有迭代器方法

TreeSet:内部使用二叉树结构,可以通过实现compareAble 接口 实现排序。还可以使用比较器作为TreeSet 构造参数传入。

一般集合中存储的对象覆盖hashCode 和equal 。

/**
	 * 对象自然排序 按照年龄排序
	 */
	@Override
	public int compareTo(Student o) {
		if (!(o instanceof Student)) {
			throw new ClassCastException();
		}
		int temp = this.age - o.age;
		return temp == 0 ? this.stuName.compareTo(o.stuName) : temp;
	}

HashTable:内部数据结构哈希表 同步 不允许null 作为key value

HashMap:内部使用也是哈希表 不同步。允许key 和value 作为null 同步的话需要使用Collections.synchronizedMap(Map)

TreeMap:数据结构是二叉树。不是同步。可以对key 排序

LInkedHashMap:数据结构是链表和哈希表,集合存入和取出顺序一直。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛乌龟一起走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值