1.Collections类
a.概述
* 此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。
b.常用方法
- addAll(Collection <? super T> c, T… elements)
- 将所有指定元素添加到指定 collection 中。
List<Integer> list = new ArrayList<>();
Collections.addAll(list,3,4,34,4);
- binarySearch(List<? extends Comparable<? super T>> list, T key)
- 使用二分搜索法搜索指定列表,以获得指定对象。
- replaceAll(List<T> list, T oldVal, T newVal)
- 使用另一个值替换列表中出现的所有某一指定值。
- reverse(List<?> list)
- 反转指定列表中元素的顺序。
- shuffle(List<?> list)
- 使用默认随机源对指定列表进行置换。
- sort(List<T> list)
- 根据元素的自然顺序 对指定列表按升序进行排序。
- swap(List<T?> list, int i, int j)
- 在指定列表的指定位置处交换元素。
- addAll(Collection <? super T> c, T… elements)
public class Temp1 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
//添加元素
Collections.addAll(list,3,4,34,4);
System.out.println(list);
//二分查找
int index = Collections.binarySearch(list, 34);
System.out.println(index);
//替换
Collections.replaceAll(list, 4, 100);
System.out.println(list);
//反转
Collections.reverse(list);
System.out.println(list);
//随机置换
Collections.shuffle(list);
System.out.println(list);
//排序
Collections.sort(list);
System.out.println(list);
//交换
Collections.swap(list, 0, 3);
System.out.println(list);
}
2.Map接口概述
* 将键映射到值的对象
* 一个映射不能包含重复的键
* 每个键最多只能映射到一个值
* 允许使用 null 值和 null 键
3.Map接口和Collection接口的不同
* Map是双列的,Collection是单列的
* Map的键唯一,Collection的子体系Set是唯一的
* Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
4.Map集合的功能概述
a:添加功能
* V put(K key,V value):添加元素。 * 如果键是第一次存储,就直接存储元素,返回null * 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
b:删除功能
* void clear():移除所有的键值对元素 * V remove(Object key):根据键删除键值对元素,并把值返回
c:判断功能
* boolean containsKey(Object key):判断集合是否包含指定的键 * boolean containsValue(Object value):判断集合是否包含指定的值 * boolean isEmpty():判断集合是否为空
d:获取功能
* Set<Map.Entry<K,V>> entrySet(): * V get(Object key):根据键获取值 * Set<K> keySet():获取集合中所有键的集合 * Collection<V> values():获取集合中所有值的集合
e:长度功能
* int size():返回集合中的键值对的个数
public class Map_test01 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("语文", 67);
map.put("数学", 87);
map.put("英语", 88);
System.out.println(map);
//V remove(Object key)根据键删除键值对元素,并把值返回
Integer math = map.remove("数学");
System.out.println(math);
System.out.println(map);
//containsKey(Object key)
if(map.containsKey("语文")){
map.put("语文", 80);
}
System.out.println(map.get("语文"));
//获取集合中所有键的集合
Set<String> keys = map.keySet();
System.out.println(keys);
//获取集合中所有值的集合
Collection<Integer> collection = map.values();
System.out.println(collection);
}
}
5.Map集合的遍历
a.键找值思路:
- 效率较低,需要两次遍历
- 获取所有键的集合
- 遍历键的集合,获取到每一个键
- 根据键找值
b.键值对对象找键和值思路:
- 效率较高,只需一次遍历
- 获取所有键值对对象的集合
- 遍历键值对对象的集合,获取到每一个键值对对象
- 根据键值对对象找键和值
public class Bianli_1 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("语文", 67);
map.put("数学", 87);
map.put("英语", 88);
//第一种
Set<String> set = map.keySet();
for (String string : set) {
System.out.println(string+":"+map.get(string));
}
//第二种
System.out.println("-----------");
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
String key = iterator.next();
System.out.println(key+":"+map.get(key));
}
//第三种
System.out.println("----------");
for(Map.Entry<String, Integer> entry : map.entrySet()){
System.out.println(entry.getKey()+" "+entry.getValue());
}
}
}
6.HashMap集合键是自定义对象
7.LinkedHashMap概述和使用
* 底层是链表实现的可以保证怎么存就怎么取
8.TreeMap集合键是自定义类型
9.统计字符串中每个字符出现的次数
public class Ti8 {
//统计字符串中每个字符出现的次数
public static void main(String[] args) {
String str = "sdsdddfvcd";
HashMap<Character, Integer> hs = new HashMap<>();
char[] cs = str.toCharArray();
for (char c : cs) {
if (!hs.containsKey(c)) {
hs.put(c, 1);
}else{
hs.put(c,hs.get(c)+1);
}
}
for(Character character : hs.keySet()){
System.out.println("字符"+character+"出现了"+hs.get(character)+"次");
}
}
}
10.HashMap和Hashtable的区别
面试题
- HashMap和Hashtable的区别
- Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高
- Hashtable不可以存储null键和null值,HashMap可以存储null键和null值
- HashMap和Hashtable的区别
11.练习
- a.模拟斗地主洗牌和发牌,牌没有排序
- b.模拟斗地主洗牌和发牌并对牌进行排序的代码实现
12.泛型固定下边界
public class Fanxing {
public static void main(String[] args) {
List<?> list = null;
list = new ArrayList<String>();
list = new ArrayList<Integer>();
/*
* ?等号右边的泛型不确定的时候使用,但添加,删除元素等会报错
* list.add(34);
*/
}
}