VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Java教程 >
  • 17、Java——集合:Set与Map

 1、List : 有序的,可重复的

(1)新增了一些根据索引操作的方法

①ArrayList②Vector③LinkedList

Set : 无序的  不可重复

(2)新增功能: static <E> Set<E> of(E... elements) 返回包含任意数量元素的不可修改集。

其他方法从Collection继承,遍历方式:foreach,iterator

(3)注意:存放数据的顺序与内部真实存储的顺序可能不一致

2、HashSet-->是由HashMap维护的

(1)无序的,不可重复,底层结构: 哈希表(数组+链表+红黑树)。

(2)特点: 查询,增删效率较高,无序,去重。

(3)应用场景 : 存储数据由单个值决定的情况下,想要去重的情况下,适合使用HashSet,新增内容 : 无新增方法

    (4)哈希表中hashcode与equals之间的关系(前提是重写hashcode与equals都是根据成员变量计算)

(5)equals相等hashcode一定相等,hashcode相等,equals不一定相等

(6)哈希表存储自定义引用数据类型数据的去重:需要在数据的类型中重写hashcode与equals方法,实现根据内容(成员变量的值)进行比较和计算。

 

 

3、TreeSet --> 是由TreeMap维护的

(1)无序,去重,底层结构 : 红黑树(平衡二叉树),特点 : 默认升序排序

(2)新增方法 : 数据的大小比较相关的方法,因为红黑树结构中数据已经比较过大小,默认升序

4、ClassCastException : 类型转换异常

(1)问题: 在存储自定义引用数据类型数据的时候,对象数据不确定比较规则,在TreeSet无法实现比较,无法排序

(2)需要: 指定学生数据的比较规则,内部比较规则|内部比较器|自然排序,实现一个java.lang.Comparable接口,重写compareTo方法,在compareTo方法内部指定比较规则

(3)定义在类的内部,是一种默认的比较规则

①缺点: 比较局限,不够灵活,硬编码,不便于后期维护

(4)外部比较规则|外部比较器|定制排序

①定义在javabean类的外部,单独指定某种数据的某种比较规则

②使用的时候,可以指定使用哪一个中外部比较规则,没有指定外部比较规则,默认需要内部,实现一个接口Comparator接口,重写int compare(T o1, T o2) 方法,方法内部指定两个参数的比较规则

③实现内部比较器: 定义一个TreeSet集合存储学生信息,要求根据学生姓名进行排序,实现根据姓名降序排序

 

5、类 java.util.Collections 提供了对Set、List、Map操作的工具方法。

(1)如何处理HashMap的线程不安全问题:

①可以Hashtable

a.线程安全问题b.HashMap允许key与value为null,Hashtable不允许c.细节问题,底层源码

②static <K,V>Map<K,V> synchronizedMap(Map<K,V> m) 返回由指定映射支持的同步(线程安全)映射。

③juc 高级并发编程包,ConcurrentHashMap<K,V>-->推荐

6、Map <K,V>

(1)存储键值对数据,元素的集合,键值对的集合,K-V 键值对,key,value可以为任意引用数据类型的数据

(2)key--> 唯一的,无序的 --> Set集合,value --> 无序的,可重复的  -->Collection

(3)键值对为一个映射关系,key--> 映射-->value,一个key只能对应一个value,一个key可以实现对应一个集合作为value,集合中可以存放多个值

7、Map集合的遍历方式:

(1)keySet() 获取集合中所有的key,然后遍历key,根据key获取value

(2)values() 获取集合中所有的value

(3)entrySet() 返回多个Map.Entry类型的键值对对象,一个set集合

8、HashMap

(1)底层: 哈希表(数组+链表+红黑树),特点: 查询,增删效率较高,新增方法: 无新增方法,遍历方式: 与map相同,并允许null值和null键

(2)①DEFAULT_LOAD_FACTOR : 默认的加载因子     0.75

    ②DEFAULT_INITIAL_CAPACITY : 默认初始容量  1<<4 = 16

    ③threshold 扩容临界值 | 阀值  CAPACITY*LOAD_FACTOR

(3)扩容: newCap = oldCap << 1 每次扩容原数组容量的2倍,去重: key中存储数据的类型要求重写hashcode与equals方法

9、TreeMap

(1)根据key实现去重①底层结构: 红黑树②特点: 根据key对数据做升序排序③新增功能: 比较相关的一些方法

 

(2)根据key做去重,根据key做排序①要求: key指定比较规则|方式|比较器|排序②内部比较器③外部比较器④定义TreeMap存储键值对数据,key为Teacher

10、Properties

(1)存储的键值对都是字符串,Properties可以保存到流中或从流中加载。

(2)软编码 : 经常改动的内容不要定义在源代码中,定义在一个外部的文件中-->配置文件,从程序中每次动态从文件中进行读取内容,使用读入的最新内容。

(3)配置文件 : properties格式,符合Properties特点: 键值对  都是字符串。

11、SE重点知识:  面向对象   集合

(1)集合 与 数组之间的区别:

(2)Collection与Collections之间的区别

(3)List与Set之间的区别

(4)ArrayList与LinkedList,Vector之间的区别

(5)ArrayList特点与扩容问题

(6)HashMap扩容机制

(7)HashMap线程安全问题

①数组:

    定长

    引用数据类型

    存储数据类型一致

    有序

②集合:

    引用数据类型

    存储任意引用数据类型数据

    容量可以根据数据的多少动态增删

③Collection : 单个数据值元素的集合

    a.List : 有序  可重复

        ArrayList

        LinkedList

    b.Set  : 无序  不可重复

        HashSet

        TreeSet

④Map : 映射元素的集合

    HashMap

    TreeMap

    Hashtable

    Properties

⑤Collections 操作集合数据的工具类

多线程

网络编程

链表图

哈希表

 

 

HashMap哈希表



出处:
https://www.cnblogs.com/Blank0926/p/15062160.html


相关教程