set和map总结

Setmap

 

Set下的两个子类

元素无序,唯一。

Hashset

HashSet

(1)HashSet:不保证元素的迭代顺序。并且,不保证该顺序恒久不变。

(2)怎么保证的呢?

HashSet底层数据结构是哈希表。

它依赖两个方法:hashCode()equals()

顺序:

首先,判断hashCode()值是否相同。

相同:

继续走equals()方法,根据其返回值:

true:说明元素重复,不添加到集合。

false:说明元素不重复,添加到集合。

不同:直接添加到集合。

 

(3)怎么重写hashCode()equals()方法呢?

hashCode():

把对象的所有成员变量值相加即可。

如果是基本类型,就加值。如果是引用类型,就加哈希值。

equals():

A:this==obj

B:!(obj instanceof Student)

C:所有成员变量的值比较。基本类型用==,引用类型用equals()

 

如果不会,eclipse()自动生成。

 

(1)TreeSet:根据构造方法的不用,选择使用自然排序或者比较器排序。

            按照实际的需求,可以对元素进行排序。并且保证唯一。

(2)怎么保证的呢?

排序:底层结构是二叉树。按照树节点进行存储和取出。

两种实现:

A:自然排序(元素具备比较性)

 

TreeSet的无参构造,要求对象所属的类实现Comparable接口。

 

B:比较器排序(集合具备比较性)

 

TreeSet的带参构造,要求构造方法接收一个实现了Comparator接口的对象。

 

 

唯一:根据返回值是否为0

注意:

如果同时有两种方案,以谁为主呢?以比较器为主。

 

(4)原理:二叉树保证元素唯一 排序

A:第一个添加的数据作为根节点。

B:从第二个开始,

每一个数据从根节点开始比较,

如果大了,往右边放,

如果小了,往左边放,

如果相同,替换。

C:从根节点开始,获取数据的规则,是按照每个数据的:左,中,右原则。

 

 

Map下的两个子类

|--Map(双列 底层结构是针对键有效,跟值无关)

|--HashMap

底层数据结构是哈希表。

线程不安全,效率高。

 

怎么保证唯一性的呢?

它依赖两个方法:hashCode()equals()

顺序:

首先判断hashCode()值是否相同。

同:继续走equals(),看返回值

如果true:就不添加到集合。

如果false:就添加到集合。

不同:就添加到集合。

|--Hashtable

底层数据结构是哈希表。

线程安全,效率低。

 

怎么保证唯一性的呢?

它依赖两个方法:hashCode()equals()

顺序:

首先判断hashCode()值是否相同。

同:继续走equals(),看返回值

如果true:就不添加到集合。

如果false:就添加到集合。

不同:就添加到集合。

|--TreeMap

底层数据结构是二叉树。

线程不安全,效率高。

 

怎么保证唯一性的呢?是根据返回是否是0

怎么保证排序的呢?两种方式

自然排序(元素具备比较性)

实现Comparable接口

比较器排序(集合具备比较性)

实现Comparator接口

 

HashMapHashtable的区别?(面试题)

HashMap:线程不安全,效率高。允许null键和值。

Hashtable:线程安全,效率低。不允许null键和值。

 

MapCollection的区别?(面试题)

A:Map 是由键值对组成的集合,Map的键(key)是唯一的,(value)可以重复。

B:Collection 是有单列数据组成的集合,它的儿子List是可以重复的,Set是唯一的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值