set & map

Iterable
    |-- Collection
        |-- List
            |-- ArrayList
            |-- Vector
                |-- Stack
            |-- LinkedList
        |-- Set
            |-- HashSet
                |-- LinkedHashSet
            |-- TreeSet
        |-- Queue
            |-- Deque
                |-- LinkedList
Set

​ 概述:Set集合中的元素是唯一的。有些Set是无序的,有些Set是有序的。

HashSet

​ 特性:
​ a. 底层的数据结构是哈希表
​ b. 不保证迭代顺序(无序),并且不保证迭代顺序恒久不变(不保证元素之间的相对位序)
​ c. 能够存储null
​ d. 不同步

LinkedHashSet

​ 特性:
​ a. 是HashSet的子类
​ b. 底层数据结构是哈希表和双向链表
​ c. 哈希表保证了元素的唯一性
​ d. 双向链表定义迭代顺序,该顺序就是元素的插入顺序
​ e. 能够存储null
​ f. 不同步

*注意事项:

​ a. 元素的唯一性依赖于存储元素的equals()和hashCode()
​ b. 千万不要修改Set集合元素的属性值

TreeSet

特性:
a. 底层的数据结构是 TreeMap, TreeMap的底层是红黑树。
b. 如果创建对象时,没有传入 Comparator(比较器) 对象,则根据自然顺序进行排序
c. 如果创建对象时,传入了 Comparator 对象,则根据 Comparator 进行排序。
d. 不能存储 null 元素,除非在Comparator中定义的null的比较规则
e. 不同步

API:
	E ceiling(E e)
	E floor(E e)
	E higher(E e)
	E lower(E e)
	
	E first()
	E last()
	E pollFirst()
	E pollLast()

	//视图技术
	NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 
1. 元素的自然顺序(natural order)是什么? int compareTo(T o)
    要求元素实现Comparable接口, 自然顺序就是Comparable接口中compareTo()定义的顺序。

2. Comparator接口
    int compare(T o1, T o2)
    o1 < o2: 返回负整数
    o1 = o2: 返回零
    o1 > o2: 返回正整数
    
3. TreeSet 是如何保证元素的唯一性的呢?
	查看源码,底层是红黑树,遇到相同的key,更新value值
	它依赖于存储元素的 compareTo(obj) 方法,或者是传入的 Comparator 对象的 compare(o1, o2) 方法
	
*:注意事项:
    a. TreeSet(BST)不依赖存储元素的equals()和hashCode()方法。
    b. 千万不要修改Set集合中元素的属性值
Map
      |-- HashMap
      		|-- LinkedHashMap
      |-- Hashtable
      		|-- Properties
      |-- TreeMap
Map

概述
a. 将键映射到值的对象。(举例: 字典:键–>单词, 值–>释义,发音,词源…)
b. Map 中键是唯一的 (不能包含重复的键,一个键只能关联一个值)
c. 每个键最多只能映射到一个值。

API:
	增(改):
		V put(K key, V value)
		void putAll(Map<? extends K, ? extends V> m)
	删:
		void clear()
		V remove(Object key)
	查:
		V get(Object key)
		boolean containsKey(Object key)
		boolean containsValue(Object value)
	获取集合属性:
		boolean isEmpty()
		int size()
	遍历:
		Set<Map.Entry<K,V>> entrySet()
		Set<K> keySet()
		Collection<V> values()
HashMap

特性:
a. 底层数据结构是哈希表。
b. 允许null键和null值。
c. 不保证映射的顺序,特别是它不保证该顺序恒久不变。
d. 不同步。

HashMap VS Hashtable
共同点:底层的数据结构都是哈希表
不同点:
    a. HashMap的键和值可以是null, Hashtable不可以
    b. HashMap是不同步的, Hashtable是同步的
Properties

特性:
a. Hashtable<Object, Object> 的子类
b. Properties 类表示了一个可持久的属性集。
c. Properties 可以把数据保存到流中,或者从流中加载数据。
d. Properties 中每个键及其对应值都是一个字符串。

注意事项:1. 不要使用Hashtable里面定义的方法添加键值对!因为它们可以插入不是String 类型的数据。

​ 2. 如果一个Properties中含有非String的键值对,那么这样的Properties是”不安全”的。调用 store 或者 save 方法将失败。

API:
    增(改):
        Object setProperty(String key, String value)
    查:
        String getProperty(String key)
        String getProperty(String key, String defaultValue)
    遍历:
        Set<String> stringPropertyNames()
流相关:
    // void store(OutputStream out, String comments)
    void store(Writer writer, String comments)
    // void load(InputStream inStream)
    void load(Reader reader)
    注意事项:字节流默认使用 ISO8859-1 字符编码。

    void storeToXML(OutputStream os, String comment)
    // void storeToXML(OutputStream os, String comment, String encoding)
    void loadFromXML(InputStream in)
    注意事项:默认使用UTF-8字符编码。
LinkedHashMap

概述:
a. HashMap的子类
b. 底层数据结构是哈希表和双向链表,具有可预知的迭代顺序。
c. 哈希表保证了键的唯一性
d. 双向链表定义了迭代顺序, 也就是插入顺序
e. 不同步

*注意事项:LinkedHashMap不能直接用于LRU中。

TreeMap

特性:
a. 底层的数据结构是红黑树。
b. 如果创建对象时,没有传入 Comparator 对象,键将按自然顺序进行排序。
c. 如果创建对象时,传入了 Comparator 对象,键将按 Comparator 进行排序。
d. 不同步

API:
	K ceilingKey(K key)
	K floorKey(K key)
	K higherKey(K key)
	K lowerKey(K key)
	
	K firstKey()
	K lastKey()
	Map.Entry<K,V> pollFirstEntry()
	Map.Entry<K,V> pollLastEntry()

	//视图方法
	NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) 
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值