[后端]java基础(4.2)java中级基础之集合_List,web前端三大主流框架

来源:未知 浏览 110次 时间 2021-06-17 14:48

接下来我们来说说Collection的另一个子接口Set。和List一样Set也可以用来存放多个元素。我们主要来学习Set的三个实现类。

HashSet

[后端]java基础(4.2)java中级基础之集合_List

LinkedHashSet

同样它们之间的相同点有:

[后端]java基础(4.2)java中级基础之集合_List

存入的元素不能重复

都是无序的(不能通过下标来查询)

他们也有不同点:

HashSet的底层结构是哈希表网站seo它们之间的相同点有:

都是Set的实现类

存入的元素不能重复

都是无序的(不能通过下标来查询)

他们也有不同点:

HashSet的底层结构是哈希表主要用于快速查找存入HashSet的对象必须定义HashCode。不能保证保存次序

TreeSet底层为树状结构百度收录存入HashSet的对象必须定义HashCode。不能保证保存次序

TreeSet底层为树状结构可以保证保存次序

LinkedHashSet具有HashSet的速度且底层使用链表维护元素的次序。

下面我们以HashSet的方法来讲讲:

添加一个元素: add(元素)

HashSet set = new HashSet();

set.add("大妖怪");

删除一个元素:remove(元素)

HashSet set = new HashSet();

set.add("大妖怪");

set.remove("大妖怪");

清除所有元素:clear();

HashSet set = new HashSet();

set.add("大妖怪");

set.clear();

讲到这你可能会疑惑以上的例子并没有像讲List那样把所有的结果都打印出来。那是因为我们接下来要重点讲一下Set的查询。 我们知道。set集合都是无序的那么我们怎么来把它里面的元素打印出来呢?没错!无法单独取出来只能用遍历。我们一般用for each遍历或者iterator迭代器。

for each

HashSet set = new HashSet();

set.add("大妖怪");

set.add("小妖怪");

for (Object object : set) {

System.out.println(object);

}

iterator

HashSet set = new HashSet();

set.add("大妖怪");

set.add("小妖怪");

Iterator it = set.iterator();

while (it.hasNext()) {

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

}

那么我们刚刚说set无法存重复元素那么我们来试试:

HashSet set = new HashSet();

set.add("大妖怪");

set.add("大妖怪");

set.add("大妖怪");

set.add("大妖怪");

set.add("大妖怪");

Iterator it = set.iterator();

while (it.hasNext()) {

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

}

运行的结果你会发现不管存入多少个”大妖怪”我们只能迭代出一个也就是说我们在往set里面存东西的时候它会去已有的里面匹配如果有则覆盖掉原有的因此不管存入多少都只会有一个。 还有一点就是我们说过HashSet是不保证顺序的:

HashSet set = new HashSet();

set.add("大妖怪");

set.add("二妖怪");

set.add("三妖怪");

set.add("四妖怪");

set.add("五妖怪");

Iterator it = set.iterator();

while (it.hasNext()) {

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

从这个的运行结果可以看出遍历出来的结果并没有按照我们存入的顺序来可以课后做实验和另外两个Set做个对比。 其实Set和List的区别就在于有序和无序其它的方法基本上和List一样使用了而且我们还可以把List装到Set或者Set装到List这个我们以后会细讲。

标签: 妖怪我们HashSet