集合之——LinkedHashSet

    我们常说List集合是有序、可重复;Set集合是无序、不可重复的。

    那么我们试试一个程序,说明为什么LinkedHashSet是“有序”的呢?


package com.ilaoda.day0912;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * 测试 LinkedHashSet
 * @author Administrator
 *
 */
public class Test2 {
	public static void main(String[] args) {
		Set set = new LinkedHashSet();
		
		set.add("World");
		set.add("iLaoda");
		set.add("Hello");
			
		System.out.println(set);		
		//打印:[World, iLaoda, Hello]
	}
}

结果:

[World, iLaoda, Hello]


    为什么会出现存入和取出一样的呢?不是说Set集合是无序、不重复的吗?怎么会矛盾呢?

    其实,所说的无序不重复中的“无序”,指的是在存入的时候,上一个元素和下一个元素在链表中的位置不是挨着的,很随意,可能中间相隔多个间隔,而且位置顺序也没有前后之分(这才是通常所说的“无序”)。

    但是,每存入的前后元素,他们是通过引用来指向存入的前后元素。即相当于给每个存入的元素编号,他们的编号是有顺序的,但是所在的存储位置是没顺序的,所以打印出来的结果就是按照存入的顺序。

    所以,我们要理解,所说的无序,是指所存储的位置之间无序。

    下面,我画张图说明一下。


转载于:https://my.oschina.net/ilaoda/blog/505603

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值