文章目录
集合体(二)
Map集合
Map集合的基本功能【应用】
package MapGroup;
import java.util.HashMap;
import java.util.Map;
public class MapDemo1 {
public static void main(String[] args) {
//创建集合对象
Map<String, String> map = new HashMap<String, String>();
//V put(K key, V value) 将指定的值与该映射中的指定键相关联
map.put("01", "shady");
map.put("02", "tt");
map.put("03", "at");
System.out.println(map);
//V remove(Object key) 根据键删除键值对元素
System.out.println("-------------");
map.remove("01");
System.out.println(map);
System.out.println("-------------");
// void clear() 移除所有的键值对元素
//map.clear();
//System.out.println(map);
System.out.println("-------------");
//boolean containsKey(Object key)
System.out.println(map.containsKey("02"));
System.out.println(map.containsKey("01"));
//boolean containsValue(Object value) 判断集合是否包含指定的值
System.out.println("-------------");
System.out.println(map.containsValue("shady"));
System.out.println(map.containsValue("tt"));
// boolean isEmpty() 判断集合是否为空
System.out.println("-------------");
System.out.println(map.isEmpty());
//int size() 集合的长度,也就是集合中键值对的个数
System.out.println("-------------");
System.out.println(map.size());
}
}
Map集合的获取功能【应用】
//V get(Object key) 根据键获取值
System.out.println("-------------");
System.out.println(map.get("02"));
//Set keySet() 获取所有键的集合
System.out.println("-------------");
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println(key);
}
//Collection values() 获取所有值的集合
Collection<String> key1=map.values();
for (String ww:key1)
{
System.out.println(ww);
}
Map集合的遍历(方式2)【应用】
Set<Map.Entry<K,V>> entrySet():获取所有键值对对象的集合
遍历键值对对象的集合,得到每一个键值对对象
package MapGroup;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo2 {
public static void main(String[] args) {
//创建对象
Map<String,String> map=new HashMap<String,String>();
//增加元素
map.put("杨会龙","李倩");
map.put("刘志鹏","高安婷");
map.put("shady","shady1");
map.put("sb","bh");
//获取所有键值对对象集合
Set<Map.Entry<String, String>> entry = map.entrySet();
for (Map.Entry<String,String> cc:entry){
String key=cc.getKey();
String value=cc.getValue();
System.out.println(key+","+value);
}
}
}
Map集合的案例【应用】
HashMap
初始值 16
数组+链表
可以保存null
key和value都可以为null
HashMap集合练习之键是String值是Student
统计字符串中每个字符出现的次数
案例需求
键盘录入一个字符串,要求统计字符串中每个字符串出现的次数。
举例:键盘录入“aababcabcdabcde” 在控制台输出:“a(5)b(4)c(3)d(2)e(1)”
public class HashMapDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个字符串:");
String line=sc.nextLine();
TreeMap<Character,Integer> s=new TreeMap<Character,Integer>();
//遍历字符串,获取每一个字符
for (int i=0;i<line.length();i++)
{
char key=line.charAt(i);
//拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其返回值
Integer value=s.get(key);
if(value==null)
{
s.put(key,1);
}
else
{
value++;
s.put(key,value);
}
}
StringBuilder sb=new StringBuilder();
Set<Character> keySet=s.keySet();
for (Character key:keySet)
{
Integer value=s.get(key);
sb.append(key).append("(").append(value).append(")");
}
String result = sb.toString();
System.out.println(result);
}
}
Collections概述和使用【应用】
Collections类常用方法
public static void sort(List list) 将指定的列表按升序排序
public static void reverse(List<?> list) 反转指定列表中元素的顺序
public static void shuffle(List<?> list) 使用默认的随机源随机排列指定的列表
ArrayList集合存储学生并排序【应用】
案例需求
ArrayList存储学生对象,使用Collections对ArrayList进行排序
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
package MapGroup;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
public class CollectionsDemo {
public static void main(String[] args) {
//创建ArrayList集合对象
ArrayList<Student> s = new ArrayList<>();
//创建学生类对象
Student s1 = new Student("linqingxia", 30);
Student s2 = new Student("zhangmanyu", 35);
Student s3 = new Student("wangzuxian", 33);
Student s4 = new Student("liuyan", 33);
//把学生添加到集合
s.add(s1);
s.add(s2);
s.add(s3);
s.add(s4);
Collections.sort(s, new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int num=s1.getAge()-s2.getAge();
int num2=num==0? s1.getName().compareTo(s2.getName()):num;
return num2;
}
});
for (Student ss:s){
System.out.println(ss.getName()+","+ss.getAge());
}
}
}
模拟斗地主案例-普通版本【应用】
package MapGroup;
import java.util.ArrayList;
import java.util.Collections;
public class PokerDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
//往牌盒里面装牌
/* ♦2,♦3,♦4...♦K,♦A ♣2,... ♥2,... ♠2,... 小王,大王 */
//定义花色数组
String[] colors = {"♦", "♣", "♥", "♠"};
//定义点数数组
String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
for (String color : colors) {
for (String number : numbers) {
list.add(color + number);
// System.out.println(color+number);
}
}
list.add("小王");
list.add("大王");
//洗牌
Collections.shuffle(list);
//发牌,也就是遍历集合,给三个玩家发牌
ArrayList<String> lqxArray = new ArrayList<String>();
ArrayList<String> lyArray = new ArrayList<String>();
ArrayList<String> fqyArray = new ArrayList<String>();
ArrayList<String> dpArray = new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
String poker = list.get(i);
if (i >= list.size() - 3) {
dpArray.add(poker);
} else if (i % 3 == 0) {
lqxArray.add(poker);
} else if (i % 3 == 1) {
lyArray.add(poker);
} else if (i % 3 == 2) {
fqyArray.add(poker);
}
}
//看牌,也就是三个玩家分别遍历自己的牌
lookPoker("林青霞", lqxArray);
lookPoker("柳岩", lyArray);
lookPoker("风清扬", fqyArray);
lookPoker("底牌", dpArray);
}
public static void lookPoker(String name, ArrayList<String> array) {
System.out.print(name + "的牌是:");
for (String poker : array)
{
System.out.print(poker + " ");
}
System.out.println();
}
}
File类
File类概述和构造方法【应用】
File类的构造方法
- File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
- File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例
- File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例
File类创建功能【应用】
public boolean createNewFile()
当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空
文件
/*
* public boolean createNewFile() 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
* public boolean mkdir() 创建由此抽象路径名命名的目录
* public boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
*
*/
//需求1:我要在E:\\itcast目录下创建一个文件java.txt
File f1 = new File("E:\\itcast\\java.txt");
System.out.println(f1.createNewFile());
//需求2:我要在E:\\itcast目录下创建一个目录JavaSE
File f2 = new File("E:\\itcast\\JavaSE");
System.out.println(f2.mkdir());
//需求3:我要在E:\\itcast目录下创建一个多级目录JavaWEB\\HTML
File f3 = new File("E:\\itcast\\JavaWEB\\HTML");
System.out.println(f3.mkdirs());
//需求4:我要在E:\\itcast目录下创建一个文件javase.txt
File f4 = new File("E:\\itcast\\javase.txt");
// System.out.println(f4.mkdir());
System.out.println(f4.createNewFile());
File类判断和获取功能【应用】
判断功能
方法名 | 说明 |
---|---|
public boolean isDirectory() | 测试此抽象路径名表示的File是否为目录 |
public boolean isFile() | 测试此抽象路径名表示的File是否为文件 |
public boolean exists() | 测试此抽象路径名表示的File是否存在 |
获取功能
方法名 | 说明 |
---|---|
public String getAbsolutePath() | 返回此抽象路径名的绝对路径名字符串 |
public String getPath() | 将此抽象路径名转换为路径名字符串 |
public String getName() | 返回由此抽象路径名表示的文件或目录的名称 |
public String[] list() | 返回此抽象路径名表示的目录中的文件和目录的名称字符串数组 |
public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
File类删除功能【应用】
方法名 | 说明 |
---|---|
public boolean delete() | 删除由此抽象路径名表示的文件或目录 |