• 《java入门第一季》之集合框架(Collection小儿子Set集合)


    /*
     * Collection主要的连个儿子:
     * |--List
     * 有序(存储顺序和取出顺序一致),可重复
     * |--Set
     * 无序(存储顺序和取出顺序不一致),唯一
     * 
     * HashSet implements Set:它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。(这次测的这样,下次就不一定这样)
     * 注意:虽然Set集合的元素无序,但是,作为集合来说,它肯定有它自己的存储顺序,
     * 而你的顺序恰好和它的存储顺序一致,这代表不了有序,你可以多存储一些数据,就能看到效果。

     */


    以简单的代码来看看什么效果。


    import java.util.HashSet;
    import java.util.Set;
    
    public class SetDemo {
    	public static void main(String[] args) {
    		// 创建集合对象
    		Set<String> set = new HashSet<String>();
    
    		// 创建并添加元素
    		set.add("hello");
    		set.add("java");
    		set.add("world");
    		set.add("jav");
    		set.add("world");
    
    		// 增强for
    		for (String s : set) {
    			System.out.println(s);
    		}
    	}
    }
    输出结果:

    hello
    jav
    java
    world


    可见存取与取出顺序是不一样的。无序里面其实带着有序。对于原因,要看源码后理解。接下来先笼统介绍一下原因。因为底层实际上时hashmap(这是另一种集合,后边会写到)

    原因:这个方法底层依赖 两个方法:hashCode()和equals()。

    步骤:
     * 首先比较哈希值
     * 如果相同,继续走,比较地址值或者走equals()
     * 如果不同,就直接添加到集合中
     * 按照方法的步骤来说:
     * 先看hashCode()值是否相同
     * 相同:继续走equals()方法
     * 返回true: 说明元素重复,就不添加
     * 返回false:说明元素不重复,就添加到集合
     * 不同:就直接把元素添加到集合



    下一节介绍hashset的add方法存取有序和无序的概念,以及存储自定义对象注意事项。

  • 相关阅读:
    java学习笔记 --- 网络编程(网络的基础知识)
    java学习笔记 --- 多线程(线程安全问题——同步代码块)
    java学习笔记 --- 多线程(多线程的控制)
    java学习笔记 --- 多线程(多线程的创建方式)
    java学习笔记 --- 多线程(1)
    java学习笔记 --- IO流小结
    java学习笔记 --- IO(3)
    java学习笔记 --- IO(2)
    java学习笔记 --- IO(1)
    把测试错误的图像重新挑选出来进行测试
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299707.html
Copyright © 2020-2023  润新知