JAVA自学笔记18

1、Map接口:

1)功能:



2)

Map<String,String>m=new HashMap<String,String>();

//添加元素,元素无序
System.out.println("map.put("cc","coco"));//null
//替换键值,返回该键的上一个值,若键不存在,返回null System.out.println(map);//cc=coco,左边是键,右边是值 //map.clear();//清除所有元素
//System.out.printn(map.remove("cc"));//coco。若键存在,则删除该键,返回该键的键值。若不存在,返回null System.out.println(map.containsKey("cc"));true.//集合存在该键,则返回true。若不在,则返回false System.out.println(map.containsKey(map.isEmpty()));//集合为空,则返回false System.out.println(map.containsKey(map.size);//返回集合中键的数目 //获取功能
System.out.println((map.get(cc));//coco。将获取该键的键值,若键不存在,将返回null Set<String> set=map.keyset();
for(String key:set){
System.out.println(key);
}//将返回所有的键 Collection<String>con=map.values();
for(String value:value){
System.out.println(value);
}//将返回所有的键值 //Map集合的遍历-方式1依键寻值
//获取所有的键-遍历键的集合,获取得到每一个键-根据键去找值
Map<String,String>m=new HashMap<String,String>(); map.put("cc","coco");
map.put("jc","jack"); Set<String> set=map.keyset();
for(String key:set){
Strng value=map.get(key);
System.out.println(value);
} //Map集合的遍历-方式2
//获取所有的键值段的集合
//遍历键值对对象的集合,得到每一个键值对对象
//根据键值对对象获取键和键值
//键值对对象的表示:Set<Map.Entry<K,V>>entrySet()l;返回键值对对象的集合
Set<Map.Entry<String,String>>set=map.entrySet();
for(Map.Entry<String,String>me:set){
String key=me.getKey();
String value=me.getValue();
}

3)两种遍历方式的图解

2、HashMap

1)键是哈希表结构,可以保证键的唯一性,是Map的接口实现

2)HashMap

//创建集合对象
HashMap<String,String>hm=new HashMap<String,String>(); hm.put("cc","coco");
hm.put("jc","jack"); Set<String>set=hm.keySet();
for(String key:Set){
String value=hm.get(key);
System.out.println(value);
}

3)HashMap

HashMap<Integer,String>=new HashMap<Integer,String>();
Integer i=new Integer(55);
String s="jack";
hm.put(i,s);
hm.put(14,"coco");
Set<Integer>set=hm,keySet();
for(Integer key:set){
String value=hm.get(key);
}

4)HashMap

//Student类略

HashMap<String,Student>hm=new HashMap<String,Student>();

Student s1=new Student("coco",22);
Student s1=new Student("kiki",23);
//添加元素
hm.put("5414",s1);
hm.put("5415",s2);
//遍历
Set<String>set=hm.keySet(); for(String key:set){
Student value=hm.get(key);
}

5)HashMap

//创建集合对象
HashMap<Student,String>hm=new HashMap<Student,String>(); //创建学生对象
Student s1=new Student("coco",22);
Student s1=new Student("kiki",23); //添加元素
hm.put(s1,"3f4d");
hm.put(s2,"4f4h"); //遍历
Set<Student>set=hm.keySet();
for(Student key:set){
String value=hm.get(key);
//若出现某几个对象成员变量相同但出现了多次该键时,在Student类中生成HashCode()和equal()即可
}

3、LinkedHashMap

1)Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。即键是有序的

2)

LinkedHashMap<String,String>hm=new LinkedHashMap<String,String>();

hm.put("1223","dd");
hm.put("1223","wd");
hm.put("1233","qd");
for(String key:set){
String value=hm.get(key);//输出语句中重复的将覆盖
}

4、TreeMap类

1)键为红黑树结构,可以保证键的排序和唯一性

2)TreeMap集合键是String值是String的案例

TreeMap<String,String>tm=new TreeMap<String,String>;

tm.put("coco","cc");
tm.put("jack","jc");
set<String>set=tm.eySet();
for(String key:set){
String value=tm.get(key);
//使用的是自然排序
}

3)TreeMap集合键是Student值是String的案例

TreeMap<String,String>tm=new TreeMap<String,String>(new Comparator<Student>(){
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;
}
});//比较器排序,按年龄从低到高排序
Student s1=new Student ("kiki",23);
Student s2=new Student ("jiji",24); tm.put(s1,"5821");
tm.put(s1,"5851");
set<String>set=tm.keySet();
for(String key:set){
String value=tm.get(key);
//要重写compareTo方法实现Comparable接口才能实现自然排序

@例题1:统计字符串中每个字符出现的次数

图解

Scannner sc=new Scanner(System.in);
//键盘录入一个字符串
String line=sc.nextLine();
//定义TreeMap集合
TreeMap<Character,Integer>tm=new TreeMap<Character,Integer>(); //把字符串转换为字符数组
char[] chs=line,toCharArray(); //遍历数组
for(char ch:chs){
Integer i=tm.get(ch,1);
}else{
i++;
tm.put(ch,i);
}}
StringBuilder sb=new StringBuilder(); Set<Character>set=tm.keySet();
for(Character key:set){
Integer value=tm.get(key);
sb.append(key).append)("(").append(value).append(")"); String result=sb.toString;
System.out,println(result);
}

@例题3:HashMap嵌套HashMap

//创建集合对象
HashMap<String,HashMap><String,Integer>>czbkMap=new HashMap<String,HashMap><String,Integer>>(); //创建基础班集合对象
HashMap<String,Integer>jcMap=new HashMap<String,Integer>();
jcMap.put("cc",12);
jcMap.put("bb",14); //添加到大集合中
czbkMap.put("jc",jcMap); //创建就业班集合对象
HashMap<String,Integer>jyMap=new HashMap<String,Integer>();
jcMap.put("aa",13);
jcMap.put("dd",15); //添加到大集合中
czbkMap.put("jy",jyMap); //遍历集合
Set<String>czbkMapSet=czbkMap.keySet();
for(String czbkMapKey:czbkMapSet){
HashMap<String,Integer>czbkMapValue=czbkMap.get(czbkMapSet);
Set<String > czbkMapValueSet=czbkMapValueSet.keySet();
for(String czbkMapValueKey:czbkMapValueSet){
Integer czbkMapValueValue=czbkMapValue.get(czbkMapValueKey);
System.out,println(czbkMapValueKey+","czbkValueValue);
}
}

@例题4:HashMap集合嵌套ArrayList

//创建集合对象
HashMap<String,ArrayList<String>>hm=new HashMap<String,ArrayList<String>>(); //创建元素集合1
ArrayList<String>array1=new ArrayList<String>();
array1.add("黄盖");
array1.add("孙权");
bjczbkMap.put("jc",array1)
bjczbkMap.put("jc",array2)
hm.put("三国","array1");//添加键 //创建元素集合2
ArrayList<String>array2=new ArrayList<String>();
array3.add("孙悟空");
array3.add("观音");
hm.put("西游记","array2");//添加键 //创建元素集合1
ArrayList<String>array3=new ArrayList<String>();
array4.add("贾宝玉");
array4.add("薛宝钗");
bjczbkMap.put("jc",array3)
bjczbkMap.put("jc",array4)
hm.put("红楼","array3");//添加键
//遍历集合
Set<String>set=hm.keySet();
for(String key:set){
System.out.println(key);
ArrayList<String> array=hmget(key);
for(String s:value){
System.out.println("\t"+s);
}
}

@例题6:ArrayListq嵌套HashMap

//创建集合对象
ArrayList<HashMap><String.String>>array=new ArrayList<HashMap<String,String>>(); //创建元素1
HashMap<String,String>hm1=new HashMap<String,String>();
hm1.put("周瑜","小乔");
hm1.put("吕布","貂蝉");
//把元素添加到array里
array.add(hm1); //创建元素2
HashMap<String,String>hm1=new HashMap<String,String>();
hm1.put("牛魔王","铁扇");
hm1.put("金角","银角");
//把元素添加到array里
array.add(hm2); //创建元素1
HashMap<String,String>hm1=new HashMap<String,String>();
hm1.put("牛肉","牛肉面");
hm1.put("陈靖仇","于小雪");
//把元素添加到array里
array.add(hm1); //遍历
for(HashMap<String,String>hm:array){
Set<String>set=hm.keySet();
for(String key:set){
String value=hm.get(key);
System.out.println(key+" "+value)
}
}

@例题7:HashMap嵌套HashMap嵌套HashMap

//创建大集合
HashMap<String,HashMap<String,ArrayList<Student>>>czbkMap=new HashMap<String,HashMap<String,ArrayList<Student>>>(); //北京校区
HashMap<String,ArrayList<Student>> bjczbkMap=new HashMap<String,ArrayList<Student>>();
ArrayList<Student>array1=new ArrayList<Student>();
Student s1=new Student("林青霞","27");
Student s2=new Student("风清扬","30");
array1.add(s1);
array1.add(s2);
ArrayList<Student>array2=new ArrayList<Student>();
Student s3=new Student("董存瑞","17");
Student s4=new Student("李云龙","60");
array2.add(s3);
array2.add(s4);
//其余类比不再给出
//遍历集合
Set<String>czbkMapSet=czbkMap.keySet();
for(String czbkMapKey:czbkMapSet){
for(String czbkMapKey:czbkMapSet){
System,out.println(czbkMapKey);
HashMap<String,ArrayList<Student>>czbkMapValue=cabkMap.get(czbkMapKey);
set<String>czbkMapValueSet=czbkMapValue.keySet();
for(String czbkMapValueKey:czbkMapValueSet){
ArrayList<Student>czbkMapValueValue=czbkMapValue.get(czbkMapValueKey);
for(Student s:czbkMapValueValue){
System.out.println(s.getName);
}
}
}
} @例题8:HashMap与Hashtable的区别 Hashtable:此类实现一个哈希表,与HashMap用法几乎一样,但它不允许null键和null值 。它是同步的,HashMap是不同步的。 @例题9:Ltst,Set,Map接口是否都继承自Map接口?
List,Set不继承自Map接口,它们继承自Collection接口,Map本身就是一个顶层接口 2、Collections类:
1)针对集合操作的工具类
2 )Collection与Collections的区别:前者是单列集合的顶层接口。后者是对集合操作的工具类
3)成员方法
①public static <T> void sort(List<T>List)
排序。默认进行自然排序
public static <T> int binarySearch(List<?>list,T key)
进行二分查找
public static <T> max(collection<?> coll)
求最大值
public static void reverse(List<?>list)
反转
public static void shuffle (List<?>list)
随机置换
List<Integer>list=new ArrayList<Integer>()'

list.add(20);
list.add(30);
list.add(10);
list.add(60);
list.add(5);
list.add(200); Collections.sort(list);
int index=Collections(list,10);
System.out.println(Collections.max(list));
Collections.reverse(list);
Collections.shuffle(list);

@例题10:ArrayList存储自定义对象并排序

//学生类略
Public class Student implements Comparable<Student>{
public int compareTo(Student s){
int num=this.age-s.age;
int num2=num==0?this.name.comparaTo(s.name):num;
return num2;
} List<Student>list=new ArrayList<Student>(); Student s1=new Student("huh",34);
Student s2=new Student("hh",44); list.add(s1);
list.add(s2); //自然排序
//collections.sort(list); //比较器排序,以比较器为主
Collections.sort(list,new Comparator)<Student>(){
public int compare(Student s1,Student s2){
int num=s2.getAge()-s1.getAge();
return num;
} }) for(Student s:List){
System.out.println(s.getName())
}

@例题11:模拟斗地主洗牌和发牌

ArrayList<String> array=new ArrayList<String>();

String[] colors={"方块","梅花","红桃","黑桃"}

String[] numbers={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
for(String color:colors){
for(String number:numbers){
array.add(color.concat(number));
}
}
array.add(大王);
array.add(小王); //洗牌
Collections.shuffle(array);
//发牌
ArrayList<String>p1=new ArrayList<String>();
ArrayList<String>p2=new ArrayList<String>();
ArrayList<String>p3=new ArrayList<String>();
ArrayList dipai=new ArrayList<String>();
for(int x=0;x<array.size();x++){
if(x>array.size()-3){
diPai.add(array.get(x));
else if(x%3==0){p1.add(array.get(x))
}
else if(x%3==1){p2.add(array.get(x))
}
else if(x%3==2){p3.add(array.get(x))
}
}
} //看牌
lookPoker("p1",p1);
lookPoker("p2",p2);
lookPoker("p3",p3); public static void lookPoker(String name,ArrayList<String>array){
System.out.println(name+"的牌是");
for(String s:array){
System.out.println(s+" ")
}
System.out.println(" ")
}

图解:

//完整代码
//创建一个HashMap集合
//创建一个ArrayList集合
//创建花色和点数数组
//从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayList里面存储编号即可
//洗牌(洗的是编号)
//发牌(发的是编号,为了使得在看牌时编号是排序的,就创建TreeSet集合接收)
//看牌(遍历TreeSet集合,获取编号,到HashMap里找对应的牌) //创建一个HashMap集合
// 创建一个HashMap集合
HashMap<Integer, String> hm = new HashMap<Integer, String>(); // 创建一个ArrayList集合
ArrayList<Integer> array = new ArrayList<Integer>(); // 创建花色数组和点数数组
// 定义一个花色数组
String[] colors = { "♠", "♥", "♣", "♦" };
// 定义一个点数数组
String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
"K", "A", "2", }; // 从0开始往HashMap里面存储编号,并存储对应的牌,同时往ArrayList里面存储编号即可。
int index = 0; for (String number : numbers) {
for (String color : colors) {
String poker = color.concat(number);
hm.put(index, poker);
array.add(index);
index++;
}
}
hm.put(index, "小王");
array.add(index);
index++;
hm.put(index, "大王");
array.add(index); // 洗牌(洗的是编号)
Collections.shuffle(array); // 发牌(发的也是编号,为了保证编号是排序的,就创建TreeSet集合接收)
TreeSet<Integer> fengQingYang = new TreeSet<Integer>();
TreeSet<Integer> linQingXia = new TreeSet<Integer>();
TreeSet<Integer> liuYi = new TreeSet<Integer>();
TreeSet<Integer> diPai = new TreeSet<Integer>(); for (int x = 0; x < array.size(); x++) {
if (x >= array.size() - 3) {
diPai.add(array.get(x));
} else if (x % 3 == 0) {
fengQingYang.add(array.get(x));
} else if (x % 3 == 1) {
linQingXia.add(array.get(x));
} else if (x % 3 == 2) {
liuYi.add(array.get(x));
}
} // 看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)
lookPoker("风清扬", fengQingYang, hm);
lookPoker("林青霞", linQingXia, hm);
lookPoker("刘意", liuYi, hm);
lookPoker("底牌", diPai, hm);
} // 写看牌的功能
public static void lookPoker(String name, TreeSet<Integer> ts,
HashMap<Integer, String> hm) {
System.out.print(name + "的牌是:");
for (Integer key : ts) {
String value = hm.get(key);
System.out.print(value + " ");
}
System.out.println();
}

JAVA自学笔记18的更多相关文章

  1. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  2. JAVA自学笔记27

    JAVA自学笔记27 1.类的加载 1)当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. ①加载:就是指将class文件读入内存,并为之创 ...

  3. JAVA自学笔记09

    JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...

  4. JAVA自学笔记05

    JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...

  5. JAVA自学笔记06

    JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  6. JAVA自学笔记04

    JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...

  7. JAVA自学笔记07

    JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...

  8. JAVA自学笔记10

    JAVA自学笔记10 1.形式参数与返回值 1)类名作为形式参数(基本类型.引用类型) 作形参必须是类的对象 2)抽象类名作形参 需要该抽象类的子类对象,通过多态实现 3)接口名为形参 需要的是该接口 ...

  9. JAVA自学笔记13

    JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...

随机推荐

  1. 移动端根据不同DPR加载大小不同的图片

    1.首先创建mixin.styl文件代码如下: bg-image($url) // 创建bg-image($url)函数 background-image: url($url + "@2x. ...

  2. 【BZOJ3782】上学路线

    题解: 这个容斥以前做过 到i点的所有方案显然是个组合数 然后要减去不合法的方案数 我们可以考虑成减去到每个障碍点为第一次遇到的障碍然后之后乱走就可以了 因为模数不是质数,所以crt合并

  3. 在 Xshell 中 使用 hbase shell 进入后 无法删除 问题

    在 Xshell 中 使用 hbase shell 进入后 无法删除 问题: 在hbase shell下,误输入的指令不能使用backspace和delete删除,使用过的人都知道,这是有多坑,有多苦 ...

  4. mongodb输错命令后不能删除问题

    在用crt连接Linux操作MongoDB时,命令输错了,想删除的时候,却删除不了,原因是crt的配置有问题,解决办法如下 第一步:选项-->会话选项

  5. User模型扩展和自定义

    参考如下: django文档参考 django signal使用总结 django 信号注册 django信号问题1 django oneTooneFiled     1. django 自定义用户u ...

  6. 51Nod1518 稳定多米诺覆盖 动态规划 插头dp 容斥原理

    原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1518.html 题目传送门 - 51Nod1518 题意 51Nod真是个好OJ ,题意概括的真好, ...

  7. AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-SoundHound-Inc-Programming-Contest-2018-E.html 题目 ...

  8. Redis Pubsub命令用法

    一.什么是pub/sub及实现Pub/Sub功能(means Publish, Subscribe)即发布及订阅功能. Redis通过publish和subscribe命令实现订阅和发布的功能. 订阅 ...

  9. 启动tomcat出现Removing obsolete files from server... Could not clean server of obsolete ……错误

    在Eclipse启动tomcat出现"Removing obsolete files from server... Could not clean server of obsolete …… ...

  10. PyQt PySide QListWidget 添加自定义 widget

    PyQt PySide QListWidget 添加自定义 widget 原文链接:https://stackoverflow.com/questions/25187444/pyqt-qlistwid ...