集合学习总结二

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:数据结构是链表和哈希表,集合存入和取出顺序一直。

猜你喜欢

转载自blog.csdn.net/qq_29897369/article/details/78700672
今日推荐