黑马程序员-------集合(Set,Map)

来源:互联网 发布:php 定时任务管理系统 编辑:程序博客网 时间:2024/06/09 12:38

------- android培训java培训、期待与您交流! ----------

Set接口里的方法和Collection中的方法是一致的。Set元素是无序的,元素不可以重复。常见的子类对象有HashSet和TreeSet。


HashSet:底层使用的是哈希表数据结构。HashSet集合通过元素的两个方法hashCode和equals,来保证元素的唯一性。如果元素的hashCode值相同,则判断equals是否为true。如果元素的hashCode值不同,不会调用equals 。先判断hashCode值,如果值相同则会进行比较,如果值不同则不会进行比较。在描述对象的时候,如果该对象要被存到集合中,通常情况都要重写hashCode和equals方法。


HashSet 底层数据结构是哈希表。线程是不同步的。


Hash基础代码。

代码演示:



HashSet练习:往hashset集合中存入自定义对象。姓名和年龄相同为同一个人。


TreeSet:底层数据结构是二叉树。可以对Set集合中的元素进行排序,通过compareTo方法return 0,保证元素的唯一性。

TreeSet的第一种排序方式:让元素自身具备比较性,让元素实现Comparable接口,覆盖compareTo方法,这种排序方式称为元素的自然顺序,或者默认顺序。排序时当主要条件相同时要判断一下次要条件。


代码演示:



TreeSet的第二种排序方式:当元素自身不具备比较性,或者具备的比较性不是所需要的时,就需要让集合自身具备比较性,自定义一个比较器,将比较器对象作为参数传递给TreeSet集合的构造函数,在集合初始化时就有了比较方式。定义一个类,实现Comparator接口,覆盖compare方法。


代码演示:

TreeSet练习:按照字符串长度排序。字符串本身具备比较性,但是他的比较性不是所需要的。这时只能使用比较器。


Map<K,V>集合:该集合存储键值对。一对一往里存,而且要保证键的唯一性。

|--HashMap:基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null 值和null键。

(除了非同步和允许使用null 之外,HashMap 类与Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 将 Hashtable替代,JDK1.2.效率高。


|--TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator(比较器) 进行排序,具体取决于使用的构造方法。
和Set很像。其实大家,Set底层就是使用了Map集合。线程不同步。可以用于给Map集合中的键进行排序。

Map集合的基本方法:
1 添加元素。
  put(key,value);
  putAll();
2 删除元素。
  clear();
  remove(Object obj);
3 判断元素。
  containsKey();
  containsValue();
  equals(Object obj);
4 获取元素。
  get(Object key);
  size();
  vilues();


代码演示:


Map

(1)Map是一个键值对形式的集合。它的元素都是由键和值组成。
(2)Map和Collection的区别?(面试题)
A:Map 是由键值对组成的集合,Map的键是唯一的,值可以重复。
B:Collection 是有单列数据组成的集合,它的儿子List是可以重复的,Set是唯一的。
(3)HashMap和Hashtable的区别?(面试题)
HashMap:线程不安全,效率高。允许null键和值。
Hashtable:线程安全,效率低。不允许null键和值。

Map结合的取出原理:将map集合转成set集合,再通过迭代的方式取出。

map集合的两种取出方式:
1 keySet:将map中所有的键存到set中,在用get方法取出。
因为set具备迭代方法,所以可以用迭代的方式取。


2 Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了Set集合中,
而这个关系的数据类型就是Map.Entry.


代码演示:


Map集合的俩个小练习代码实现部分

一   需求:要求:对学生对象的年龄进行升序排序。


代码演示:


二 需求:  "sdfgzxcvasdfxvdf"获取该集合中各字母出现的次数。


代码演示:



0 0
原创粉丝点击