目录
思维导图
一、map集合的特点及遍历方式
* map集合的特点
* 键值对
* 遍历:
* 拿到key,再拿值
* 拿到映射关系:键值都有了
案例如下:
package com.heminjie.map;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
* map集合的特点
* 键值对
* 遍历:
* 拿到key,再拿值
* 拿到映射关系:键值都有了
*
*
* HashMao与hastable的区别
* 1.hashtable 是线程安全的
*
* 2.jdk1.8以下hashtable的key不能存放null
* @author Administrator
*
*/
public class Demo1 {
public static void main(String[] args) {
// Hashtable<Object, Object> table = new Hashtable<>();
// table.put("a",1);
// table.put(null,null);
Map<String ,Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
// map.put(null, 2);
map.put("c", 3);
map.put("d", 4);
System.out.println(map);
Object remove = map.remove("b");
System.out.println(remove);
System.out.println(map);
//修改也是调用put方法
map.put("c", 21);
System.out.println(map);
// 查询
System.out.println(map.get("c"));
// 查询所有
// 1.先拿到map集合中的所有key
Set keys = map.keySet();
for (Object key : keys) {
System.out.println("键: "+key+": 值: "+map.get(key));
}
// 2.拿到映射关系
Set<Entry<String, Integer>> entrySet = map.entrySet();
for (Entry<String, Integer> entry : entrySet) {
System.out.println("键: "+entry.getKey()+": 值: "+entry.getValue());
}
}
}
结果:
一个是先拿到map集合中的所有key
另一个是用映射关系
二、字符串出现的次数
* 实现思路
* 1.做字符串切割:得到一个字符数组
* 2.接下来遍历,拿到单个字符
* 3.如果g该字符没有出现过,即value值为null,那么该字符为key,初始化为ie
* 4.如果已经出现过,拿到原来的值+1
案例如下
package com.heminjie.map;
import java.nio.MappedByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
public class Demo2 {
public static void main(String[] args) {
String s = "jlkjslkdjlksjfksjfdkjljljflsajf";
char[] arr = s.toCharArray();
Map<Character, Integer> map = new HashMap<>();
for (char c : arr) {
Integer value = map.get(c);
if(value == null) {
map.put(c, 1);
}else {
map.put(c, value+1);
}
}
Set<Entry<Character,Integer>> entrySet = map.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
System.out.println(entry.getKey()+":"+entry.getValue());
}
}
}
结果:
若想按照字符的出现次数进行排序输出,可以这样写
案例
package com.heminjie.map;
import java.nio.MappedByteBuffer;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;
public class Demo2 {
public static void main(String[] args) {
String s = "jlkjslkdjlksjfksjfdkjljljflsajf";
char[] arr = s.toCharArray();
Map<Character, Integer> map = new TreeMap<>();
for (char c : arr) {
Integer value = map.get(c);
if(value == null) {
map.put(c, 1);
}else {
map.put(c, value+1);
}
}
map.entrySet().stream().sorted((x,y)->x.getValue()-y.getValue()).forEach(System.out::println);
}
}
结果
三、泛型
* 泛型
* 之前:不健壮的代码,会在运行时才会把错误暴露出来
* 之后:将潜在的问题暴露出来,早预防早治疗
* 将运行器的出现的异常转换为编译期的错误
package com.heminjie.map;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 泛型
* 之前:不健壮的代码,会在运行时才会把错误暴露出来
* 之后:将潜在的问题暴露出来,早预防早治疗
* 将运行器的出现的异常转换为编译期的错误
* @author Administrator
*
*/
public class Demo3 {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(4);
set.add(5);
// set.add("a");
for (Object obj : set) {
if(Integer.valueOf(obj.toString()) % 2 ==0) {
System.out.println(obj);
}
// set.remove(obj);
}
}
}
结果:这个是能被2整除的数
来和大家说下为什么要在Set那里加一个integer,不加的化,如果有人那里你这个代码,在set.add()括号里面放的不是数字就会报错,如下:
固定了integer之后,在里面数的不是数字就会出错,这样就固定了,不然以后别人用自己代码出问题了,也好告诉他问题所在
四、工具类
数据的转换 :
* 集合之间的相互转换:
* 1.数组转成集合:本质上依然是一个数组,长度是不可变的
* 2.集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含哪个元素
案例:
package com.heminjie.map;
import java.util.Arrays;
import java.util.List;
/**
* 集合之间的相互转换:
* 1.数组转成集合:本质上依然是一个数组,长度是不可变的
* 2.集合与数组所具备的方法是不一样的,如对于数组而言,就没有判断内部包含哪个元素
*
* @author Administrator
*
*/
public class Demo4 {
public static void main(String[] args) {
String[] arr={"a","b","c","d"};
List<String> list = Arrays.asList(arr);
// Object[] array = list.toArray();
list.add("e");
// java.lang.UnsupportedOperationException
System.out.println(list.size());
}
}
结果:
数组里面就已经定死数量了的,若再给他在外增加一个,就是下面的结果,不增加打印出来的结果为4,大家可以去试试
其他方法
* 对于工具类其他方法的一些应用
* sort
* tostring
sort方法
案例:
package com.heminjie.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 对于工具类其他方法的一些应用
* sort
* tostring
* @author Administrator
*
*/
public class Demo5 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("b");
list.add("c");
list.add("a");
//无序
System.out.println("-------无序---------");
System.out.println(list);
//abc排序
Collections.sort(list);
System.out.println("-------abc排序---------");
System.out.println(list);
//cba排序
// 这里面的x、y指的是集合中的元素
Collections.sort(list,(x,y)->y.compareTo(x));
System.out.println("-------cba排序---------");
System.out.println(list);
}
}
结果:
来跟大家说个方法,有些人为什么同样是sort,为什么报错
首先,Collections.sort( );是用来排序的没错吧,上面那个list( )括号里面放的是String,而String是实现了接口的,自己可以看一下
而我们现在的list放的是Person,而自己却没有给Person弄个接口,肯定会报错
所以我们要实现一个接口,和从写一个compareTo,就不会报错啦,还可以打印出来
有人会问可以不写接口吗 ,答案是,当然可以,
案例如下
package com.heminjie.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 对于工具类其他方法的一些应用
* sort
* tostring
* @author Administrator
*
*/
public class Demo5 {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("b",17));
list.add(new Person("c",18));
list.add(new Person("a",19));
// System.out.println(list);
// Collections.sort(list);
Collections.sort(list,(x,y) -> x.getName().compareTo(y.getName()));
System.out.println(list);
}
}
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
结果
toString方法
最后一个案例,打印数组的内容:代码如下
package com.heminjie.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 对于工具类其他方法的一些应用
* sort
* tostring
* @author Administrator
*
*/
public class Demo5 {
public static void main(String[] args) {
Integer[] arr = {3,6,9,2,5,8};
Arrays.sort(arr);
System.out.println(arr);
}
}
这样打印出来的结果是一串地址
怎么样才能把他们打印出来了呢?简单,给他加一个Arrays.toString( )
如下
package com.heminjie.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 对于工具类其他方法的一些应用
* sort
* tostring
* @author Administrator
*
*/
public class Demo5 {
public static void main(String[] args) {
Integer[] arr = {3,6,9,2,5,8};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
}
结果
变为降序方法如下
ackage com.heminjie.map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Demo5 {
public static void main(String[] args) {
Integer[] arr = {3,6,9,2,5,8};
Arrays.sort(arr,(x,y) -> x - y);
System.out.println(Arrays.toString(arr));
}
}
结果
ok,今天就是分享的内容了,谢谢支持!