1.Map接口
1.特点:双列存储,键对应值,键不能重复,值可以重复。如果键重复,后面的键的值会将已经添加的键的值覆盖掉。
2.分为:
(1)HashMap
无序的(不是根据添加顺序排列的,是根据哈希值排列的,与HashSet相似,HashSet底层就是用HashMap实现的)。
public class HashMapDemo {
/*
* Map:双列存储 键--值 键不能重复,值可以重复
* HashMap
* TreeMap
* HashTable*/
public static void main(String[] args) {
/*键去重复:hashCode() equals()
* 如果键重复,后面的键的值会覆盖已将添加进入的键的值
* 允许一个为空的键*/
Map<String,String> map = new HashMap<>();
map.put("c","b");
map.put("a","c");
map.put("c","c");
map.put("s","d");
map.put("e","a");
map.put("s","s");
System.out.println(map);//{a=c, c=c, s=s, e=a}
/*map.clear();//清空
System.out.println(map);//{}*/
/*map.remove("a");//删除对应键的元素
System.out.println(map);//{c=c, s=s, e=a}*/
System.out.println(map.get("a"));//返回键对应的值 c
System.out.println(map.containsKey("a"));//判断是否有该键 true
System.out.println(map.containsValue("s"));//返回是否有该值 true
System.out.println(map.isEmpty());//返回是否为空 false
Collection<String> values = map.values();
System.out.println(values);//[c, c, s, a]
Set<String> keySet = map.keySet();
//遍历1
for(String key:keySet){
System.out.println(key+"==="+map.get(key));
/*a===c
c===c
s===s
e===a*/
}
//遍历2
Set<Map.Entry<String,String>> entrySet = map.entrySet();
System.out.println(entrySet);//[a=c, c=c, s=s, e=a]
for(Map.Entry<String,String> entry : entrySet){
System.out.println(entry.getKey()+"==="+entry.getValue());
/*a===c
c===c
s===s
e===a*/
}
}
}
(2)TreeMap
有序的(根据自然顺序排列),键的类型必须实现排序接口(Comparable),重写CompareTo方法。
(3)Hashtable
底层实现为哈希表和单链表,是线程安全的。
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<String,String> tmap = new TreeMap<>();
//按照自然顺序排列,键的类型所属类必须实现排序接口
tmap.put("a","v");
tmap.put("d","a");
tmap.put("g","s");
tmap.put("a","a");
tmap.put("r","d");
System.out.println(tmap);//{a=a, d=a, g=s, r=d}
Hashtable<String,String> map = new Hashtable<>();
//Hashtable底层实现也是哈希表+单链表 线程安全的
map.put("a","v");
map.put("d","a");
map.put("g","s");
map.put("a","a");
map.put("r","d");
System.out.println(map);//{a=a, r=d, g=s, d=a}
}
}
2.Collections类
工具类Collections用于操作集合类,如:list、set。提供的所有方法都是静态的。
常用方法如下:
public class CollectionsDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("d");
list.add("w");
list.add("a");
list.add("d");
System.out.println(list);//[a, d, w, a, d]
Collections.sort(list);
System.out.println(list);//[a, a, d, d, w] 排序
System.out.println(Collections.binarySearch(list,"a"));//搜索,必须是排完序的 0
Collections.addAll(list,"x","y","z");//向list中添加元素
System.out.println(list);//[a, a, d, d, w, x, y, z]
ArrayList<String> list1 = new ArrayList<>();
list1.add("a");
list1.add("f");
list1.add("a");
list1.add("b");
list1.add("a");
list1.add("u");
list1.add("d");
list1.add("v");
list1.add("z");
list1.add("u");
Collections.copy(list1,list);//将list中的元素copy到list1中,list1的长度必须大于等于list的长度
System.out.println(list1);//[a, a, d, d, w, x, y, z, z, u]
/*Collections.fill(list,"A");//填充
System.out.println(list);//[A, A, A, A, A, A, A, A]*/
System.out.println(Collections.max(list));//最大值 z
System.out.println(Collections.min(list));//最小值 a
Collections.reverse(list);//反转
System.out.println(list);//[z, y, x, w, d, d, a, a]
Collections.swap(list,0,1);//指定位置交换
System.out.println(list);//[y, z, x, w, d, d, a, a]
}
}