Java基础第二十四天总结——集合

目录:

一、Map接口

二、Collection工具类

/*---------------分割线---------------------*/

一、Map接口

 Map中的key用Set来存放,不可重复。作为一个Map对象所对应的类,需重写hashCode和equals方法。

HashMap是Map接口使用频率最高的实现类。

  添加、删除、修改操作:
 Object put(Object key,Object value):将指定key-value添加到(或修改)当前map对象中
 void putAll(Map m):将m中的所有key-value对存放到当前map中
 Object remove(Object key):移除指定key的key-value对,并返回value
 void clear():清空当前map中的所有数据
 元素查询的操作:
 Object get(Object key):获取指定key对应的value
 boolean containsKey(Object key):是否包含指定的key
 boolean containsValue(Object value):是否包含指定的value
 int size():返回map中key-value对的个数
 boolean isEmpty():判断当前map是否为空
 boolean equals(Object obj):判断当前map和参数对象obj是否相等
 元视图操作的方法:
 Set keySet():返回所有key构成的Set集合
 Collection values():返回所有value构成的Collection集合
 Set entrySet():返回所有key-value对构成的Set集合

Map实现类之一:HashMap

允许使用null键和null值

所有的value构成的集合是Collection:无序的,可重复的,所以vlaue所在的类要重写equals方法

一个key-value构成一个entry

HashMap判断两个key相等的标准是:两个key通过equals方法返回true,hashCode值也相等。

HashMap判断两个value相等的标准是:两个value通过,equals方法返回true。

HashMap源码中的重要常量

DEFAULT_INITIAL_CAPACITY : HashMap的默认容量,16
MAXIMUM_CAPACITY : HashMap的最大支持容量,2^30
DEFAULT_LOAD_FACTOR:HashMap的默认加载因子
TREEIFY_THRESHOLD:Bucket中链表长度大于该默认值,转化为红黑树
UNTREEIFY_THRESHOLD:Bucket中红黑树存储的Node小于该默认值,转化为链表
MIN_TREEIFY_CAPACITY:桶中的Node被树化时最小的hash表容量。(当桶中Node的
数量大到需要变红黑树时,若hash表容量小于MIN_TREEIFY_CAPACITY时,此时应执行
resize扩容操作这个MIN_TREEIFY_CAPACITY的值至少是TREEIFY_THRESHOLD的4
倍。)
table:存储元素的数组,总是2的n次幂
entrySet:存储具体元素的集
size:HashMap中存储的键值对的数量
modCount:HashMap扩容和结构改变的次数。
threshold:扩容的临界值,=容量*填充因子
loadFactor:填充因子

HashMap内部存储结构是数组和链表的结合

Map实现类之二:LinkedHashMap

在HashMap存储结构的基础上,使用了一对双向链表来记录添加元素的顺序。

与LinkedHashSet类似,LinkedHashMap可以维护Map的迭代顺序:迭代顺序与Key-Value对的插入顺序一致

Map实现类之三:TreeMap

TreeMap存储 Key-Value 对时,需要根据 key-value 对进行排序。
TreeMap 可以保证所有的 Key-Value 对处于有序状态。
TreeSet底层使用红黑树结构存储数据
TreeMap 的 Key 的排序:
自然排序:TreeMap 的所有的 Key 必须实现 Comparable 接口,而且所有
的 Key 应该是同一个类的对象,否则将会抛出 ClasssCastException
定制排序:创建 TreeMap 时,传入一个 Comparator 对象,该对象负责对
TreeMap 中的所有 key 进行排序。此时不需要 Map 的 Key 实现
Comparable 接口
TreeMap判断两个key相等的标准:两个key通过compareTo()方法或
者compare()方法返回0

Map实现类之四:Hashtable

 Hashtable是个古老的 Map 实现类,JDK1.0就提供了。不同于HashMap,

Hashtable是线程安全的。
 Hashtable实现原理和HashMap相同,功能相同。底层都使用哈希表结构,查询
速度快,很多情况下可以互用。
 与HashMap不同,Hashtable 不允许使用 null 作为 key 和 value
 与HashMap一样,Hashtable 也不能保证其中 Key-Value 对的顺序
 Hashtable判断两个key相等、两个value相等的标准,与HashMap一致。

Map实现类之五:Properties

Properties 类是 Hashtable 的子类,该对象用于处理属性文件
由于属性文件里的 key、value 都是字符串类型,所以 Properties 里的 key
和 value 都是字符串类型
存取数据时,建议使用setProperty(String key,String value)方法和
getProperty(String key)方法

二、Collections工具类

Collections 是一个操作 Set、List 和 Map 等集合的工具类
排序操作:(均为static方法)
reverse(List):反转 List 中元素的顺序
shuffle(List):对 List 集合元素进行随机排序
sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序
sort(List,Comparator):根据指定的 Comparator 产生的顺序对 List 集合元素进行排序
swap(List,int, int):将指定 list 集合中的 i 处元素和 j 处元素进行交换

Collections常用方法

查找、替换
Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
Object max(Collection,Comparator):根据 Comparator 指定的顺序,返回给定集合中的最大元素
Object min(Collection)
Object min(Collection,Comparator)
int frequency(Collection,Object):返回指定集合中指定元素的出现次数
void copy(List dest,List src):将src中的内容复制到dest中
boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换List 对象的所有旧值

Collection常用方法:同步控制

Collections 类中提供了多个 synchronizedXxx() 方法,该方法可使将指定集
合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全
问题。

补充:

Enumeration 接口是 Iterator 迭代器的 “古老版本”

猜你喜欢

转载自www.cnblogs.com/zhoutie170821/p/12048359.html