java容器介绍_Java容器介绍HashSet

今天由小编来继续回顾容器,上次我们总结了List接口下的ArrayList和LinkedList,那么我将介绍List的兄弟接口Set。

Set接口下有一个HashSet实现类,HashSet的底层是用HashMap实现的,因此,查询效率高。由于采用Hashcode算法直接确定元素的内存地址,增删效率也高。HashSet 接口中的元素无序不可重复,不包含重复元素,最多包含一个 null,元素没有顺序 。

无序:虽说没有顺序,其实Hashset类内部有其内置的排序算法,使用者无序的将其存入,Hashset类有序的将其存放。来一段代码:

Set set = new HashSet<>();

set.add("AAAA");

set.add("CCCC");

set.add("EEEE");

set.add("DDDD");

set.add("BBBB");

for (String s : set) {

System.out.println(s);

}

8aa1ccb1a95c01a62d8802913a036815.png

遍历

HashSet作为Set接口的实现类,底层不像List接口那样以数组和节点来实现,没有相应的下标,所以普通的for循环无法遍历Hashset容器,但不用着急,总有办法遍历,就用增强for循环和迭代器来解决。上代码:

for(String s : set){

System.out.println(s);

}

Iterator iterator=set.iterator();

while (iterator.hasNext()) {

System.out.println(iterator.next());

}

容器中有一个常用的方法contains(),可以用来查找容器中是否含有当前对象,代码如下:

System.out.println(set.contains("AAAA"));

0b4eaa105957212cd1ec765ee6c488ae.png

由此可见,方法返回的是一个布尔类型的字符串。

Map

接下里,我将为大家介绍学习的重点对象Map接口下实现的类HashMap,毫不过分的说,这是容器中的重点。

给大家一个用例,假如你的List中有8000个数据对象,我现在要从8000个数据对象中查找一条,问怎么查找最快?

Map也是容器的一种,但是没有继承Collection接口,以键值对的形式存放数据,一个key对应一个value。key和value都是引用数据类型,我们可以通过key找到对应的value。

Map类中存储是以键--值对的形式,通过键来标识,所以不能重复。

接口Map,其中规定了Map的规范,各种方法的定义。方法如下:

8fc38cb7eb3a1b67b1d5b42a728134a5.png

常见的实现类有HashMap、HashTable等。

注意: 如果存入的键值对中key相同,那么后面的会覆盖掉前面的当数据存放到Map之后,我们是无法控制存放数据的顺序的。当然是以其内部的规则来存放的。

HashMap作为Map的实现类,其中的方法都进行了实现,并且定义了可以存储数据 的空间,其中使用了一个叫做Entry的内部类,作为数据的存储,后面将会提到。先来一段代码,如何创建,存放数据:

Map map = new HashMap<>();

map.put("1","一,壹,Ⅰ");

map.put("2","二,贰,Ⅱ");

map.put("3","三,叁,Ⅲ");

System.out.println(map.get("1"));

HashMap中存储数据的特点:

1.存储的元素是以K-V的形式存在的

2.map集合中 key 必须要唯一,如果添加了相同的键值对(键相同)会发生覆盖

3.map集合中元素(键值对)是无序的,和Set集合类似。

Map的遍历

前面所有讲过的所有容器都是直接遍历的,而HashMap则有点特殊,必须间接遍历。

将Map所有的 key 获取存入 Set 集合中,遍历存储 key 的 Set 集合,结合 get(key) 方法可以获取map 中每一个 key 以及对应的 value。代码如下:

Set keys = map.keySet();

// 增强for

for(String key : keys){

System.out.println(key + " - " + map.getKey(key));

}

// 迭代器

Iterator it = keys.iterator();

while(it.hasNext()){

String key = it.next();

System.out.println(key + " - " + map.getKey(key));

}

另一种遍历方法,将所有的 value 值获取后存入Collection集合中,遍历存储了所有 key 的集合,则可以获取到所有的 value 值,但此种方式只能获取到每一个value,并不能获取到key。

Collection values = map.values();

// 增强for

for (String value : values) {

System.out.println(value);

}

// 迭代器

Iterator it = values.iterator();

while(it.hasNext()){

System.out.println(it.next());

}

EntrySet

EntrySet是HashMap中的一个内部类,将Map集合中的每一个键值对作为一个 Entry 对象获取到一个Set集合中,通过对象的 getKey 和 getValue 方法获取 key 和 value。

Set> entries = map.entrySet();

// 增强for

for (Map.Entry entry : entries) {

System.out.println(entry.getKey() + "-" + entry.getValue());

}

// 迭代器

Iterator> it = entries.iterator();

while(it.hasNext()){

Map.Entry entry = it.next();

System.out.println(entry.getKey() + "-" + entry.getValue());

}

在我看来,无论是List还Set或者是Map都是集合,都是为了存储具有不同特征的数据,根据实际情况选择不同的容器即可。

所有代码都已经上传,想要学习请自行下载(免费开源0积分)。

总结:

List(ArrayList,LinkedList):单个数据,数据是可以重复的,而且可以指定位置。

Set:单个数据,数据是不可以重复,而且是无序的(不由用户来指定位置|顺序) 。

Map:成键--值对的数据,数据是没有顺序的,键是不可以重复的,hashCode在Set和Map集合中判断对象是否重复(相同) equals也是用来判断对象是否相同(重复)

身材不好就去锻炼,没钱就努力去赚。别把窘境迁怒于别人,唯一可以抱怨的,只是不够努力的自己。

本文地址:https://blog.csdn.net/qq_42121367/article/details/107898358

希望与广大网友互动??

点此进行留言吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值