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); }
结果为: