思维导图
一、Map集合的特点
1、增删改查
//增加
Map<String, Object> map=new HashMap<>();
map.put("小白1", 1);
map.put("小白2", 2);
map.put("小白3", 3);
map.put("小白4", 4);
//删除
map.remove("小白4");
//修改(当容器中已经存在key,再次存放,那么会覆盖原有的Key所对应的值)
map.put("小白2", 5);
//查
map.get("小白1");
2、以键值对形式存在
3、key可以为空
代码如下:
Map<String, Object> map=new HashMap<>();
map.put("小白1", 1);
map.put("小白2", 2);
map.put("小白3", 3);
map.put("小白4", 4);
map.put(null, 6);
System.out.println(map);
运行结果如下:
二、遍历方式
1、entrySet(先获取所有的键,在获得值)
代码如下:
Map<String, Object> map=new HashMap<>();
map.put("小白1", 1);
map.put("小白2", 2);
map.put("小白3", 3);
map.put("小白4", 4);
Set<String> keySet = map.keySet();
for (String key : keySet) {
System.out.println("key:"+key+";value="+map.get(key));
}
运行结果如下:
2、keySet
代码如下:
Map<String, Object> map=new HashMap<>();
map.put("小白1", 1);
map.put("小白2", 2);
map.put("小白3", 3);
map.put("小白4", 4);
Set<Entry<String,Object>> entrySet = map.entrySet();
for (Entry<String, Object> entry : entrySet) {
System.out.println("key:"+entry.getKey()+";value="+entry.getValue());
}
运行结果如下:
三、常用实现类HashMap
以统计字符串中字母出现的次数为例
代码如下:
public class Demon3 {
public static void main(String[] args) {
String s="sdjsdlkfhsdjhfwakaljfiefjehnjcnwiqklkw";
//将字符串转换成数组
char[] chars = s.toCharArray();
Map<Character, Integer> map=new HashMap<Character, Integer>();
//遍历数组 将字符放入map集合中的key
for (char c : chars) {
//拿到字符
Integer num = map.get(c);
//进行判断 如果没有 就给字符对应的值设为1
if(num==null||num==0) {
map.put(c, 1);
}
//如果有 就给对应字符的值+1
else {
map.put(c, num+1);
}
}
Set<Entry<Character,Integer>> entrySet = map.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
System.out.println(entry.getKey()+"出现了"+entry.getValue()+"次");
}
}
}
运行结果如下:
四、泛型
1、作用:
(1)将运行时产生的异常转换为编译期的错误
(2)提高代码的健壮性
以筛选出值为偶数的键为例
代码如下:
public class Demon4 {
public static void main(String[] args) {
Map<String, Object> map=new HashMap<>();
map.put("s", 1);
map.put("a", 2);
map.put("d", 3);
map.put("e", 4);
map.put("f", 5);
Set<Entry<String,Object>> entrySet = map.entrySet();
for (Entry<String, Object> entry : entrySet) {
Object value = entry.getValue();
Integer val=(Integer)value;
if(val%2==0) {
System.out.println("偶数对应的key为:"+entry.getKey());
}
}
}
}
运行结果如下:
运行时会报一个String类型不能转成Integer类型
但是如果定义了泛型,他会直接在编译时报错
代码如下:
2、泛型类
如果不是泛型类 ,那么方法内部不能使用泛型(不完全对)
普通类:
class CommonDao1{
public List<Object> list(Object o){
System.out.println("方法被调用");
return null;
}
}
class Book1{
}
class Order1{
}
class BookDao1 extends CommonDao1{
@Override
public List<Object> list(Object o) {
// TODO Auto-generated method stub
return super.list(o);
}
}
class OrderDao1 extends CommonDao1{
}
BookDao在继承了CommonDao后,重写方法时 传的还是一个object类型
但如果是一个泛型类的话 在重写方法时,会将各自的泛型字符带上
泛型类:
class CommonDao<T>{
public List<T> list(T t){
System.out.println("方法被调用");
return null;
}
}
class Book{
}
class Order{
}
class BookDao extends CommonDao<Book>{
@Override
public List<Book> list(Book t) {
// TODO Auto-generated method stub
return super.list(t);
}
}
class OrderDao extends CommonDao<Order>{
@Override
public List<Order> list(Order t) {
// TODO Auto-generated method stub
return super.list(t);
}
}
3、泛型方法
可以解决:如果不是泛型类 ,那么方法内部不能使用泛型这一问题
代码如下:
class CommonDao1{
public<T> List<T> list(Object o){
System.out.println("方法被调用");
return null;
}
}
class Book1{
}
class BookDao1 extends CommonDao1{
@Override
public List<Object> list(Object o) {
// TODO Auto-generated method stub
return super.list(o);
}
}
五、集合框架工具类
1.collections
(1).排序
public class Demon5 {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("小白", 18000));
list.add(new User("小薛", 15000));
list.add(new User("小滦", 20000));
list.add(new User("小戴", 8000));
list.add(new User("阿艳", 5000));
Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
// TODO Auto-generated method stub
return o1.getMoney() - o2.getMoney();
}
});
}
}
class User {
private String name;
private int money;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public User(String name, int money) {
super();
this.name = name;
this.money = money;
}
public String toString() {
return "User [name=" + name + ", money=" + money + "]";
}
}
(2).集合转换成数组
toArray();
2.Arrays
(1).toString
代码如下:
String[] arr=new String[] {"a","b","c","d"};
System.out.println(Arrays.toString(arr));
运行结果如下:
(2).asList
Arrays.asList(arr);
注意:将数组变成集合来操作,但是不能违背数组本身的特点 不然会报错
如下:
String[] arr=new String[] {"a","b","c","d"};
List<String> asList = Arrays.asList(arr);
asList.add("c");
运行结果:
(3).sort
Arrays.sort(ar);
Arrays也可以用sort排序
代码如下:
Integer[] ar=new Integer[] {12,1,5,98,15};
Arrays.sort(ar);
System.out.println(Arrays.toString(ar));
运行结果: