J2EE集合框架(Map集合)

简介: J2EE集合框架(Map集合)

1.map集合的特点及遍历方式

1.1map集合特点:

增删改查,键值对的集合,键不可以重复,键值重复后者覆盖前者,值不可以重复,key可以为null。

public static void main(String[] args) {
        Map<String,Integer> m=new HashMap<>(); 
//      增
        m.put("齐天",1);
        m.put("大圣",2);
        m.put("无情",3);
        m.put("问道",4);
        m.put("")
        m.put(null, null);
        System.out.println(m);
//      删
        Object remove = m.remove("齐天");
        System.out.println(remove);
        System.out.println(m);
        //修  也是调用put方法
        m.put("大圣",99);
        System.out.println(m);
//      查
        System.out.println(m.get("无情"));
    }   

结果为:

1.2遍历:

1.2.1.拿到key,再拿值 (key.Set)

public static void main(String[] args) {
        Map<String,Integer> m=new HashMap<>(); 
//      增
        m.put("齐天",1);
        m.put("大圣",2);
        m.put("无情",3);
        m.put("问道",4);
        System.out.println(m);
        //先拿map里的所有key
        Set keys = m.keySet();
        for (Object key : keys) {
            System.out.println("键:"+key+" "+"值:"+m.get(key));
        }
    }   

结果为:

1.2.2.拿到映射关系,键值全都有了(entrySet)

public static void main(String[] args) {
        Map<String,Integer> m=new HashMap<>(); 
//      增
        m.put("齐天",1);
        m.put("大圣",2);
        m.put("无情",3);
        m.put("问道",4);
        System.out.println(m);
        // 拿到映射关系
        Set<Entry<String, Integer>> entrySet = m.entrySet();
        for (Entry<String, Integer> entry : entrySet) {
            System.out.println("键:" + entry.getKey() + " " + "值:" + entry.getValue());
        }
    }

结果为:

1.2.3 迭代器

public static void main(String[] args) {
        Map<String, Integer> m = new HashMap<>();
        // 增
        m.put("齐天", 1);
        m.put("大圣", 2);
        m.put("无情", 3);
        m.put("问道", 4);
        m.put(null, null);
        System.out.println(m);
        //迭代器
        Iterator<String> it=m.keySet().iterator();
        while(it.hasNext()) {
            String key=it.next();
            System.out.println("键:" + key + " " + "值:" + m.get(key));
        }
    }

结果为:

3.字符串出现的次数

步骤:

1.随机给一个字符串

2.获取所有字符串

3.将字符串遍历

4.在map集合中找该key对应的值是否存在

如果存在,key对应的值+1进行key的覆盖

反之,key对应的值默认为1

5.遍历map集合

public static void main(String[] args) {
    String s="shfwijfhjfefeffijefieijfijefeiijfe";
    char[] cs = s.toCharArray();
//    map集合容器
    Map<Character,Integer> map=new HashMap<>();
    System.out.println(cs);//拿到所有字符串
//    将字符串遍历
    for (char c : cs) {
      System.out.println(c);
      Integer value = map.get(c);
      if(value !=null) {
//        如果存在,key对应的值+1进行key的覆盖
        map.put(c, value+1);
      }else {
//        反之,key对应的值默认为1
        map.put(c,1);
      }
    }
//    遍历map集合
    Set<Entry<Character,Integer>> entrySet = map.entrySet();
    for (Entry<Character, Integer> entry : entrySet) {
       System.out.println(entry.getKey()+"出现的次数为:"+entry.getValue());
    }
  }

结果为:

键值对特点:键不可以重复,但是键对应的值可以覆盖

4.泛型

4.1作用:

将运行时产生的异常转换为编译期的错误

提高代码的健壮性

运行时产生的异常:

编译期的错误:

public static void main(String[] args) {
      List list=new ArrayList();
      list.add(1);
      list.add(2);
      list.add(3);
      list.add(4);
      list.add(5);
//      list.add("c");
//      获取集合中的奇数
      for (Object object : list) {
        int num=(int) object;
        if(num % 2 == 1) {
          System.out.println(num);
        }
      }
    }

结果为:

4.2泛型类

1.类型安全:编译时检测类型

2.减少类型转换

3.概念:在类声明体中用到了类型参数。

public class demo3 {
    }
// 老师类
class Teacher {
}
// 学生类
class Student {
}
// 泛型类
class BaseDao<T> {
    public int add(T t) {
        return 0;
    }
    public int del(T t) {
        return 0;
    }
    public int upd(T t) {
        return 0;
    }
}
class TeacherDao extends BaseDao<Teacher> {
    public static void main(String[] args) {
        new TeacherDao().add(new Teacher());// 老师类的增加
        new TeacherDao().upd(new Teacher());// 老师类的修改
        new TeacherDao().del(new Teacher());// 老师类的删除
    }
}
class StudentDao extends BaseDao<Student> {
    public static void main(String[] args) {
        new StudentDao().add(new Student());// 学生类的增加
        new StudentDao().upd(new Student());// 学生类的修改
        new StudentDao().del(new Student());// 学生类的删除
    }
}

4.3泛型方法

修饰符 <T,E,...> 返回值类型 方法名(形参列表){
    方法体... 
}

5.工具类

5.1Collections

Collections用于操作LIst,Set,Map等集合

Collections提供了一系列的静态方法,可以实现对集合元素的排序,添加一些元素,随机排序,替换等操作

public static void main(String[] args) {
     List<String> list = new ArrayList<String>();
     //增加元素对象
     list.add("jun");
     list.add("lin");
     list.add("yi");
     list.add("qin");
     System.out.println("排序前"+list);
     //框架工具类方调用(排序)
     Collections.sort(list);
     System.out.println("排序后"+list);
     //调用工具类(Collections)sort方法降序
     Collections.sort(list,new Comparator<String>() {
     @Override
     public int compare(String o1, String o2) {
     //想要升序参数o1与o2调换即可
     return o2.compareTo(o1);
     }
     });
     System.out.println("排序后"+list);
     }

结果为:

 

对于引用对象

public static void main(String[] args) {
     //对于引用对象
     List<Per> list = new ArrayList<Per>();
     list.add(new Per(2,"马牛逼"));
     list.add(new Per(1,"靓仔"));
     list.add(new Per(4,"鸣人"));
     list.add(new Per(3,"卡卡西"));
     System.out.println("没排序前");
     for (Per per : list) {
     System.out.println(per);
     }
     System.out.println("已排序后");
     Collections.sort(list);
     for (Per per : list) {
     System.out.println(per);
     }
     }
     }
     class Per implements Comparable<Per>{
     private int id;
     private String name;
     public int getId() {
     return id;
     }
     public void setId(int id) {
     this.id = id;
     }
     public String getName() {
     return name;
     }
     public void setName(String name) {
     this.name = name;
     }
     @Override
     public String toString() {
     return "Per [id=" + id + ", name=" + name + "]";
     }
     public Per(int id, String name) {
     super();
     this.id = id;
     this.name = name;
     }
     @Override
     public int compareTo(Per o) {
     //根据元素对象编号升序
     return this.id - o.id;
     }

结果为:

注意:Collections类不能new对象,不是因为没有构造方法,而是因为Collections的构造方法被私有化处理了。但是调用方法可以直接通过类名调用Collections类的方法,因为Collections类中的方法都是被static修饰了,可以直接用类名调用。


5.2 Arrays

方法作用:快速输出数组内容

public static void main(String[] args) {
        // 定义数组
        String[] arr = new String[] { "jun", "lin", "yi", "qin" };
        // 将数组转换会集合
        List<String> list = Arrays.asList(arr);
        System.out.println("没有排序前:"+list);
        // 调用集合工具类Arrays的方法进行降序
        Arrays.sort(arr, new Comparator<String>() {
            // 重写方法
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        });
        System.out.println("Arrays的方法进行降序"+list);
        // 调用集合工具类Arrays的方法进行升序
        Arrays.sort(arr, new Comparator<String>() {
            //重写方法
            @Override
            public int compare(String o1, String o2) {
                return o1.compareTo(o2);
            }
        });
        System.out.println("Arrays的方法进行升序"+list);
    }

结果为:

目录
相关文章
|
4月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
4月前
|
存储 前端开发 API
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
该文章详细介绍了ES6中Set和Map数据结构的特性和使用方法,并探讨了它们在前端开发中的具体应用,包括如何利用这些数据结构来解决常见的编程问题。
ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
|
5月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
5月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
5月前
|
算法 Java 索引
【Java集合类面试四】、 描述一下Map put的过程
这篇文章详细描述了HashMap中put操作的过程,包括首次扩容、计算索引、插入数据以及链表转红黑树和可能的再次扩容。
【Java集合类面试四】、 描述一下Map put的过程
|
5月前
|
安全 Java
【Java集合类面试五】、 如何得到一个线程安全的Map?
如何得到一个线程安全的Map的方法包括:使用Collections工具类将Map包装为线程安全,使用java.util.concurrent包下的ConcurrentHashMap,以及不推荐使用性能较差的Hashtable。
|
5月前
|
安全 Java
【Java集合类面试三】、Map接口有哪些实现类?
这篇文章介绍了Java中Map接口的几种常用实现类:HashMap、LinkedHashMap、TreeMap和ConcurrentHashMap,以及它们适用的不同场景和线程安全性。
|
7月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
7月前
|
存储 JavaScript 前端开发
JavaScript进阶-Map与Set集合
【6月更文挑战第20天】JavaScript的ES6引入了`Map`和`Set`,它们是高效处理集合数据的工具。`Map`允许任何类型的键,提供唯一键值对;`Set`存储唯一值。使用`Map`时,注意键可以非字符串,用`has`检查键存在。`Set`常用于数组去重,如`[...new Set(array)]`。了解它们的高级应用,如结构转换和高效查询,能提升代码质量。别忘了`WeakMap`用于弱引用键,防止内存泄漏。实践使用以加深理解。
90 3
|
5月前
|
存储