JavaSE基础八----<集合>Map接口及其实现类 Collections类
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE基础八----<集合>Map接口及其实现类 Collections类相关的知识,希望对你有一定的参考价值。
文章目录
1.Map接口及其实现类
Map的存储方式为键值对形式; key->value;双列存储;
一个键对应一个值;键不能重复,值是可以重复的.
1.1HashMap
HashMap的默认容量为16,负载因子为0.75,即每当存储了3/4的元素后就会开始扩容,扩容速度为2倍.
当然,也可以使用构造方法来指定存储的长度以及负载因子的值.
在之前提到了HashSet的底层就是HashMap,且仅是使用了HashMap的key那一列来存储
所以,HashMap是无序(不按照添加顺序进行排序)的;而且底层是由hashcode( )方法以及equals( )方法来进行判断的,避免存入重复的键
;注意,当出现重复的键时
,后面出现的键的值会将前面的值覆盖掉
.
HashMap允许存入null键或值
.
HashMap<String,Integer> hashMap=new HashMap<String, Integer>();
hashMap.put("阿猫",10);
hashMap.put("阿猫",30);
hashMap.put("喵喵",5);
hashMap.put("猫仔",5);
hashMap.put("猫仔",10);
hashMap.put(null,10);
System.out.println(hashMap);
//{null=10, 猫仔=10, 喵喵=5, 阿猫=30}
常用方法
方法 |
---|
public V put(K key,V value) 添加元素的方法 |
public V remove(Object key)根据指定的键;删除一个键的映射 |
public boolean remove(Object key,Object value)删除指定的键对应的值 |
public void clear( )清空集合的方法 |
public boolean containsKey(Object key)判断该集合是否包含这个键 |
public boolean containsValue(Object value);判断该集合是否包含这个值 |
public boolean isEmpty( )判断集合是否为空 |
public int size( );返回该集合的有几组键值对 |
public V get(Object key);根据指定的键返回映射的值; |
public java.util.Set keySet( )返回此集合中包含的键的Set视图(获取所有键) |
public java.util.Collection values( )返回此集合中包含的值的Collection视图。(返回所有value) |
1.2TreeMap
在TreeSet的底层实际用到了TreeMap;可以按照键的自然顺序进行排序;
键不能重复;键的类型必须实现接口comparable(排序时使用的);是双列存储的;
TreeMap<String,Integer> treeMap=new TreeMap<>();
treeMap.put("阿猫",10);
treeMap.put("阿猫",30);
treeMap.put("喵喵",5);
treeMap.put("猫仔",5);
treeMap.put("猫仔",10);
System.out.println(treeMap);
//{喵喵=5, 猫仔=10, 阿猫=30}
1.3HashTable
HashTable是无序的;键不能重复;初始的默认容量为11,负载因子也是0.75;即容量到3/4时会开始扩容;扩容速度为2倍加1;
HashTable是线程安全的;实现了同步;不允许存入null这个键或值
.
Hashtable<String,Integer> hashtable=new Hashtable<>();
hashtable.put("阿猫",10);
hashtable.put("阿猫",30);
hashtable.put("喵喵",5);
hashtable.put("猫仔",5);
hashtable.put("猫仔",10);
//hashtable.put(null,10);
//HashTable不可存储null键;会出现空指针异常;
System.out.println(hashtable);
//{喵喵=5, 猫仔=10, 阿猫=30}
2.Map接口的迭代
例如写一个HashMap类型的hashmap;键值为{你=20, 我=10, 它=60, 他=30}.
通过一个方法遍历
//通过一个方法遍历,以流的方式输出;其中使用了拉莫达表达式
hashMap.forEach((k,v)-> System.out.println(k+"--"+v));
//你--20
//我--10
//它--60
//他--30
增强for循环
- 方式一:这里先用keyset方法将集合中的键获取;然后再使用foreach循环,通过get方法获取键对应的值(不建议使用);
//增强for循环
//这里先用keyset方法将集合中的键获取;
Set<String> setKey=hashMap.keySet();
//然后再使用foreach循环,通过get方法获取键对应的值;
for (String s:setKey) {
System.out.println(s+"--"+hashMap.get(s));
}
//你--20
//我--10
//它--60
//他--30
- 方式二:使用entrySet方法将键值对封装到Entry对象中;然后再使用foreach循环,通过getKey方法和getValue方法;
//增强for循环
//使用entrySet方法将键值对封装到Entry对象中;
Set <Map.Entry<String,Integer>> entrySet=hashMap.entrySet();
//然后再使用foreach循环,通过getKey方法和getValue方法;
for (Map.Entry<String,Integer> entry:entrySet) {
System.out.println(entry.getKey()+"--"+entry.getValue());
}
上面的两个方式,也可用迭代器输出
迭代器遍历
- 方式一
//也可用迭代器输出
Set<String> setKey=hashMap.keySet();
Iterator<String> iterator=setKey.iterator();
while(iterator.hasNext()){
String s=iterator.next();
System.out.println(s+"--"+hashMap.get(s));
}
- 方式二:
//也可用迭代器输出
Set <Map.Entry<String,Integer>> entrySet=hashMap.entrySet();
Iterator<Map.Entry<String,Integer>> iterator=entrySet.iterator();
while(iterator.hasNext()){
Map.Entry<String,Integer> entry=iterator.next();
System.out.println(entry.getKey()+"--"+entry.getValue());
}
3.Collections类
注意不是Collection接口.
作为集合的工具类,其中定义了大量的静态方法;有的是同步集合对象的方法,也有对List接口的集合进行排序的方法.
常用方法
返回值类型 | 方法 |
---|---|
static < T> boolean | addAll(Collection<? super T> c, T… elements) 将所有指定的元素添加到指定的集合。T ... elements----可变长度的参数 |
static < T> int | binarySearch(List<? extends Comparable<? super T>> list, T key) 使用二叉搜索算法搜索指定对象的指定列表。(注意这个集合是要经过排序的 ) |
static < T> List< T> | emptyList( ) 返回空列表(immutable)。 (注意这个列表不能添加元素;会出异常 ) |
static < T> void | copy(List<? super T> dest, List<? extends T> src) 将所有元素从一个列表复制到另一个列表中。(注释:dest:目标列表;src:源列表;注意源数组的size不能大于目标列表的size;并且目标列表中一定要有内容,不能为空的集合 )最后会将源列表的元素覆盖到目标列表. |
static < T> void | fill(List<? super T> list, T obj) 用指定的元素代替指定列表的所有元素。 |
static <T extends Object & Comparable<? super T>>T | max(Collection<? extends T> coll) 根据其元素的自然顺序返回给定集合的最大元素。 |
static < T> boolean | replaceAll(List list, T oldVal, T newVal) 将列表中一个指定值的所有出现替换为另一个。(oldVal:原来的元素;newVal:新元素 ) |
static void | reverse(List<?> list) 反转指定列表中元素的顺序。 即逆序输出. |
static <T extends Comparable<? super T>>void | sort(List< T> list) 根据其元素的natural ordering对指定的列表进行排序。 例如:a,b,c,d.... |
static void | swap(List<?> list, int i, int j) 交换指定列表中指定位置的元素。 i,j;元素的下标位置 |
以上是关于JavaSE基础八----<集合>Map接口及其实现类 Collections类的主要内容,如果未能解决你的问题,请参考以下文章
JavaSE基础八----<集合>泛型集合体系Collection接口中的方法