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 迭代器的 “古老版本”标签:Map,Java,HashMap,Object,List,value,第二十四,key,集合 来源: https://www.cnblogs.com/zhoutie170821/p/12048359.html