目录
2.Collections.sort(list, Collections.reverseOrder()); 字符串降序排序
3.Collections.sort(ll, (a, b) -> b - a);数字类型降序排序
6.list集合转数组(转字符串数组,转Object类型数组,转integer类型数组)
7.set集合转数组(转integer类型数组)--同list
8.map集合转数组(转object类型数组,转换为指定类型数组,将键(key)转为指定类型数组,将值(value)转为指定类型数组)
一.Map集合简介
Java中的Map是一种键值对的集合类型,它允许将键映射到值。在Map中,键的值是唯一的,而值则可重复。Map定义了一些方法,可以通过键来操作值。
二.Map集合的特点和遍历方式
1.特点和方法:
增删改查
获取获取Map中键值对的数量:size()
containsKey(key)方法判断Map中是否包含某个键
containsValue(value)方法判断Map中是否包含某个值
2.遍历方式
a.通过keyset转为set集合进行遍历
b.通过entryset转换为set集合遍历
代码展示
package com.ctb.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* map集合的特点:增删改查
*
* map集合的遍历:1.转ketset遍历 2.entryset遍历
*
* @author biao
*
*/
public class Demo1 {
public static void main(String[] args) {
Map<Object, String> map=new HashMap<Object, String>();
//增加
map.put("name", "东哥");
map.put("hobby", "掉找天");
map.put("age", "芜湖");
map.put("address", "奥迪噶多");
//删除-以键删除整体
map.remove("hobby");
//修改--即覆盖
map.put("age", "34");
//查询
System.out.println(map);
//containsKey(key)方法判断Map中是否包含某个键
boolean hasKey = map.containsKey("name");
//containsValue(value)方法判断Map中是否包含某个值
boolean hasValue = map.containsValue("female");
System.out.println(hasKey); // 输出: true
System.out.println(hasValue); // 输出: false
//获取Map中键值对的数量
int size = map.size();
System.out.println(size);
System.out.println("-------------keyset遍历-------------");
//遍历1--KeySet
Set<Object> keySet = map.keySet();
for (Object key : keySet) {
System.out.println(key+":"+map.get(key));
}
System.out.println("------------entrySet遍历-----------");
//遍历2--entryset
Set<Entry<Object, String>> entrySet = map.entrySet();
for (Entry<Object, String> entry : entrySet) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
输出结果:
三.通过Map集合统计一串字符串的数量
package com.ctb.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* 统计字符串的数量
* @author biao
*
*/
public class Demo2 {
public static void main(String[] args) {
//定义一窜字符串
String s = "adfjakjdflkajlfajsalkfjdklqajwlekrjlkamfdklasjklrfejqkfnmsfdakhjfdklawjerklwjmfl";
//转换成数组
char[] chars = s.toCharArray();
Map<Character, Integer> map = new HashMap<Character, Integer>();
//遍历
for (char c : chars) {
Integer o = map.get(c);
if (o == null){//如果为空,则只有一个
map.put(c,1);
}else {
map.put(c,o+1);//不为空,则+1
}
}
//将map集合转为set集合
Set<Entry<Character, Integer>> entrySet = map.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
System.out.println(entry.getKey()+"出现了"+entry.getValue()+"次");
}
}
}
输出结果:
四.泛型的作用
1.可将运行时的异常转换为编译期的错误
2.提高代码的健壮性
package com.ctb.map;
import java.util.HashMap;
import java.util.Map;
/**
* 泛型的作用
*
* @author biao
*
*/
public class Demo3 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("as", 12);
map.put("rf", 43);
map.put("haha", 24);
// map.put(12, 21);会报错,若不添加异常,则以下方法会报异常错误
//指定泛型后则 1.可将运行时的异常转换为编译期的错误 2.提高代码的健壮性
for (Integer value : map.values()) {
if (value != null){
if (value % 2 == 0){
System.out.println(value);//打印结果:12 24
}
}
}
}
}
五.Treemap排序
按照自然顺序排序
package com.ctb.map;
import java.util.Map;
import java.util.TreeMap;
/**
* treemap排序
* 默认按照自然顺序排序
* @author biao
*
*/
public class Demo6 {
public static void main(String[] args) {
Map<Integer, String> treeMap = new TreeMap<>();
treeMap.put(3, "c");
treeMap.put(1, "a");
treeMap.put(2, "b");
treeMap.put(4, "d");
//排序
for (Map.Entry<Integer, String> entry : treeMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
输出结果:
六. LinkedHashMap排序
按照插入顺序排序
package com.ctb.map;
import java.util.Map;
import java.util.LinkedHashMap;
/**
* LinkedHashMap
* 默认按照插入顺序排序
* @author biao
*
*/
public class Demo7 {
public static void main(String[] args) {
Map<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("a", "A");
linkedHashMap.put("c", "C");
linkedHashMap.put("b", "B");
for (Map.Entry<String, String> entry : linkedHashMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}
输出结果:
七.WeakHashMap弱引用
当某个键没有任何引用时,对应的键值对会被从Map中删除
package com.ctb.map;
import java.util.Map;
import java.util.WeakHashMap;
/**
* WeakHashMap 弱引用
*
* @author biao
*
*/
public class Demo8 {
public static void main(String[] args) {
// WeakHashMap 当某个键没有任何引用时,对应的键值对会被从Map中删除
Map<Object, String> weakHashMap = new WeakHashMap<>();
// weak:弱的
Object key = new Object();
weakHashMap.put(key, "value");
System.out.println(weakHashMap.get(key));
key = null;
System.gc();// 垃圾回收
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(weakHashMap.get(key));
}
}
输出结果:
八.Collections的使用
1.Collections.sort(list);默认升序
2.Collections.sort(list, Collections.reverseOrder()); 字符串降序排序
3.Collections.sort(ll, (a, b) -> b - a);数字类型降序排序
4.collections比较器排序
5.list比较器排序
6.list集合转数组(转字符串数组,转Object类型数组,转integer类型数组)
7.set集合转数组(转integer类型数组)--同list
8.map集合转数组(转object类型数组,转换为指定类型数组,将键(key)转为指定类型数组,将值(value)转为指定类型数组)
9.将集合中的元素进行翻转操作
10.将集合中的元素打乱
11.在集合中进行二分查找
12.获取集合中的最大值和最小值
13.将集合中的所有元素替换成???
14.将集合中的元素进行复制到另一个集合
package com.ctb.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* collection的使用
*
* @author biao
*
*/
public class Demo4 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("d");
list.add("b");
list.add("f");
list.add("h");
list.add("e");
System.out.println("打印前:" + list);
// 排序--对象同操作
Collections.sort(list);
System.out.println("Collections排序(默认升序):" + list);
Collections.sort(list, Collections.reverseOrder()); // 对集合进行降序排序
System.out.println("字符串降序:"+list);
List<Integer> ll=new ArrayList<>();
ll.add(2);
ll.add(4);
ll.add(42);
ll.add(5);
ll.add(7);
Collections.sort(ll, (a, b) -> b - a); // 对集合进行降序排序
System.out.println("数字类型降序:"+ll);
// collections比较器排序
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println("collections比较器排序:" + list);
// list比较器排序
list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
System.out.println("list比较器排序:" + list);
System.out.println("-----------------list集合转数组-------------------");
// 转换为字符串数组
String[] array1 = list.toArray(new String[0]);
System.out.println("转换为字符串数组:"+Arrays.toString(array1));
// 转换为Object类型数组
Object[] array2 = list.toArray();
System.out.println("转换为Object类型数组:"+Arrays.toString(array2));
// 转换为integer类型数组
List<Integer> list1 = new ArrayList<Integer>();
list1.add(12);
list1.add(4);
list1.add(3);
Integer[] array = list1.toArray(new Integer[0]);
System.out.println("转换为integer类型数组:"+Arrays.toString(array));
System.out.println("-------------------set集合转数组------------------");
// 转换为integer类型数组--其它数组类型同上
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(5);
int[] arr = set.stream().mapToInt(Integer::intValue).toArray();
System.out.println("转换为integer类型数组:"+Arrays.toString(arr)); // 输出: [1, 2, 5]
System.out.println("----------------------map集合转数组--------------------------");
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
Set<Entry<String, Integer>> entrySet = map.entrySet();
// 转换为object类型数组
Object[] array11 = entrySet.toArray();
System.out.println("转换为object类型数组:"+Arrays.toString(array11));
//转换为指定类型数组
Map.Entry<String, Integer>[] array21 = entrySet.toArray(new Map.Entry[0]);
System.out.println("转换为指定类型数组:"+Arrays.toString(array21));
//将键(key)转为指定类型数组
String[] keys = map.keySet().toArray(new String[0]);
System.out.println("将键(key)转为指定类型数组:"+Arrays.toString(keys)); // 输出: [A, B, C]
//将值(value)转为指定类型数组
Integer[] values = map.values().toArray(new Integer[0]);
System.out.println("将值(value)转为指定类型数组:"+Arrays.toString(values)); // 输出: [1, 2, 3]
//------------------------------------------------
System.out.println("============================================");
List li=new ArrayList<>();
li.add("花花");
li.add("文文");
li.add("琳琳");
li.add("安安");
System.out.println("原数据:"+li);
// 将集合中的元素进行翻转操作
Collections.reverse(li);
System.out.println("将集合中的元素进行翻转:"+li);
// 将集合中的元素打乱
Collections.shuffle(li);
System.out.println("将集合中的元素打乱:"+li);
System.out.println("---------------------------");
List<Integer> lt=new ArrayList<>();
lt.add(2);
lt.add(4);
lt.add(6);
lt.add(8);
lt.add(10);
System.out.println("原数据:"+lt);
//在集合中进行二分查找
int index = Collections.binarySearch(lt, 8); // 在集合中查找元素8
System.out.println("二分查找:"+index);
int max = Collections.max(lt); // 获取集合中的最大值
int min = Collections.min(lt); // 获取集合中的最小值
System.out.println("最大值:"+max); // 输出: 10
System.out.println("最大值:"+min); // 输出: 2
List<Integer> lis =new ArrayList<>();
lis.add(3);
lis.add(1);
lis.add(12);
lis.add(23);
lis.add(45);
System.out.println(lis);
Collections.copy(lis, lt); // 将lt中的元素复制到lis中
System.out.println("复制:"+lis);
// 将集合中的所有元素替换成0
Collections.fill(lt, 0);
System.out.println("将集合中的所有元素替换成0:"+lt);
}
}
输出结果:
九.Arrays的使用
1.数组排序--升序
2.对数组进行降序排序
3.复制一个数组的一部分或全部到一个新数组中
4.复制一个数组的一部分到一个新数组中
5.判断两个数组是否相等
6.将数组全部元素替换成???
7.将数组转换为List集合
package com.ctb.map;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* arrays的使用
*
* @author biao
*
*/
public class Demo5 {
public static void main(String[] args) {
Integer[] arr = { 2, 3, 4, 7, 456, 32, 12 };
Arrays.sort(arr);
// 数组排序--默认升序
System.out.println("数组排序--默认升序:" + Arrays.toString(arr));
// 对数组进行降序排序
Arrays.sort(arr, Collections.reverseOrder());
System.out.println("对数组进行降序排序:" + Arrays.toString(arr));
// 用于复制一个数组的一部分或全部到一个新数组中
Integer[] copyArr = Arrays.copyOf(arr, 3); // 复制数组前3个元素到新数组中
System.out.println("复制数组前3个元素到新数组中:" + Arrays.toString(copyArr));
//用于复制一个数组的一部分到一个新数组中
Integer[] copyArr1 = Arrays.copyOfRange(arr, 1, 4); // 复制数组索引1到3的元素到新数组中
System.out.println("复制数组索引1到3的元素到新数组中:"+Arrays.toString(copyArr1));
int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {1, 2, 3, 4, 5};
// 判断两个数组是否相等
boolean isEqual = Arrays.equals(arr1, arr2);
System.out.println("判断两个数组是否相等:"+isEqual); // 输出: true
// 将数组全部元素替换成0
Arrays.fill(arr, 3);
System.out.println("将数组全部元素替换成3:"+Arrays.toString(arr));
// 将数组转换为List集合
List<Integer> list = Arrays.asList(arr);
System.out.println("将数组转换为List集合:"+list);
}
}
输出结果: