zoukankan      html  css  js  c++  java
  • 集合之Set

    1.HashSet

    HashSet是无序的,而且里面的元素不可重复,每个对象都有其对应的hashCode()方法,hashCode()方法主要是获得该对象的散列码,其值就是对象的内存地址,但是String除外。

    ArrayList如果不知道元素的下标那么就要全部遍历一遍,而HashSet则不用,所以比ArrayList要好。

    常用方法:size,isEmpty,addAll()可以添加整个list集合,

    判断元素是否重复:

    1.添加元素时首先调用要存入对象的hashCode()方法,获取到hashCode的值

    2.根据hashCode值,使用哈希算法确定在哈希表中的存放位置

    3.判断改位置是否有元素,如果没有直接将元素放入该位置,如果有则调用已有对象的equals方法和要放入的对象进行比较:如果返回true,则认为是重复元素,舍弃要放入的元素。如果返回false则在当前位置下,以链表的形式追加。但是java8中有一个阈值,如果超过当前阈值则会将链表转换为TreeSet。

    tips:使用hashSet时需要重写hashCode和equals方法。

    测试:

    定义一个学生类Student,定义no,name属性,并且加入构造方法,getter,setter方法并且重写toString()方法

    新建一个类定义了一个方法用来测试:

    发现尽管student的值一样但是因为它们的内存地址不一样,也就是hashcode的值是不一样的,所以可以添加进去set集合。

    在student类中再重写equlas(),重写hashCode()方法:

    再次调用test02()方法:

    发现其实用了hashcode和equlas方法,因为equlas方法返回的是true;所以无法添加students2.

    2.TreeSet

    TreeSet里的元素是有序的,如果是int会根据大小来排序,如果是string根据asc码排序。

    当TreeSet里的元素是对象实体类型时需要实现Comparable接口并且重写toCompareTo方法,或者定义比较器类自定义排序规则,否则会报ClassCastException异常。

    1.在实体User中重写toCompareTo方法:

     自定了比较规则根据年龄成绩和姓名进行排序。

    2.自定义一个类叫UserComparator用来比较User对象

    构建TreeSet的时候需要传入自定构造的比较器类

     2.HashMap

    HashSet的构造方法中其实是实现了HashMap的,HashMap以键值对的形式存储,一个key只能对应一个value,一个value可以对应多个key,HashMap是以哈希表的方式存储的。

    常用方法:put,get,remove,isEmpty等

    put方法当put重复的key时,会变为修改value的值:

    containsKey,containsValue判断map集合中是否存在值返回布尔类型。

    keySet获得所有的key集合,返回Set集合,values获得所有的value集合,返回Collection集合,

    entrySet获得所有的key-value集合,返回Set集合,返回的Set集合为泛型是Map.Entry泛型,Entry是Map的内部接口,Entry又是一种泛型,为map集合的泛型。

    遍历map集合的三种方式:

    1.使用keySet方法

     2.使用values方法

    3.使用entrySet方法

    3.HashTable

    HashTable是线程安全的因为里面的方法都被synchronized修饰.HashTable和HashMap的区别其实和ArrayList和Vector区别差不多。

    HashTable和HashMap中的区别:

    (1).HashTable中也可以使用HashMap中的方法,区别就是HashMap中的values方法在HashTable中为elements方法。

    (2).HashTable中不允许key和value为空值,HashMap允许。

    (3).HashMap可以使用Iterator遍历,HashTable中可以使用Iterator和Enumeration遍历。

    4.Properties

    properties继承自HashTable,Properties一般用来存储key和value都为字符串类型的值。

    setProperty()设置属性,getProperty()获得某个属性,getProperties()获得属性集合。
    遍历Properties的方式:keySet,values,entrySet,keys,elements,Enumeration。

    Properties中有一个重要的方法load,用来加载属性文件(属性名=属性值的文件),一般属性文件的后缀为.properties,但是只要符合属性文件的规范就可以加载。load方法传入的参数需要输入流InputStream。属性文件一般都是iso编码不支持中文可以通过使用InputStreamReader读取和指定编码方式。

    可以通过System.getproperties获取系统的属性集合。

  • 相关阅读:
    springmvc文件上传后访问上传的图片时404
    springmvc文件上传
    springmvc的注解开发
    使用maven简单搭建springmvc
    mybatis的逆向工程
    mybatis的动态sql
    使用maven创建项目配置mybatis
    使用maven和myeclipse配置hibernate以及基本的入门程序
    maven的常用命令
    try-with-resources和multi-catch的使用
  • 原文地址:https://www.cnblogs.com/javazyh/p/10808295.html
Copyright © 2011-2022 走看看