百知教育 - 孙帅 - 14_集合框架(续)

13_List的排序

  • 代码:
    package day16;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    import java.util.Comparator;
    public class TestSort1{public static void main(String[] args){/*List<String> list = Arrays.asList("abc","xya","xsji","sji","jjo");Collections.sort(list);for(String s : list){System.out.println(s);} */ List<Student> list = Arrays.asList(new Student("YKY",20),new Student("LYH",20),new Student("HHH",19),new Student("YXM",18));Comparator<Student> c1 = new Comparator<Student>(){//if o1<o2 return 负数//if o1==o2 return 0//if o1>o2 reutrn 正数public int compare(Student o1, Student o2){return o1.age - o2.age;}}; Comparator<Student> c2 = new Comparator<Student>(){public int compare(Student o1, Student o2){return o1.name.compareTo(o2.name);}};if(true) Collections.sort(list, c1);else Collections.sort(list, c2);for(Student s : list){System.out.println(s);}}
    }
    class Student implements Comparable<Student>{String name;int age;public Student(String name, int age){this.name = name;this.age = age;}@Overridepublic String toString(){return "String [name="+name+", age="+age+"]";}@Overridepublic int compareTo(Student o){return this.name.compareTo(o.name);}
    }
  • 运行结果:

14_JDK8中对List的排序

  • 排序
    1. Collections.sort(List):要求集合中的元素实现Comparable接口
    2. Collections.sort(List, Comparator):Comparator 比较器,实现排序逻辑;集合中的元素不需要实现Comparable接口
    3. list.sort(Comparator):直接对list调用sort方法排序,只能传入Comparator;是JDK8中的方法
  • 代码:
    package day16;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.List;
    import java.util.Comparator;
    public class TestStringSort{public static void main(String[] args){List<String> list = Arrays.asList("一","四","六","七","三");Comparator<String> c1 = Comparator.naturalOrder();  //自然规则<==>Collections.sort(list);Comparator<String> c2 = c1.reversed();Comparator<String> c3 = new Comparator<String>(){List<String> list = Arrays.asList("一","二","三","四","五","六","七","八","九");public int compare(String s1, String s2){return list.indexOf(s1)-list.indexOf(s2);}};Comparator<String> c4 = c3.reversed();list.sort(c4);for(String s : list){System.out.println(s);}}
    }
  • 运行结果:

15_Set介绍

  • Set接口的特点:

    用于存放任意Object对象,无序、无下标、元素不能重复

  • Set接口中的方法:

    只有 从Collection 父接口中 继承到 的所有方法

  • 实现类:

    HashSet【重点】

  • Set遍历:
    1. 迭代器遍历 Collection 可以通过迭代器,删除集合中的元素
    2. for-each Collection JDK5
    3. foreach() 方法 需要实现 java.util.function.Consumer接口 来自JDK8
  • 代码:
    package day17;
    import java.util.HashSet;
    import java.util.Set;
    import java.util.Iterator;
    import java.util.Collection;
    import java.util.function.Consumer;
    public class TestHashSet{public static void main(String[] args){Set<String> s = new HashSet<>();s.add(new String("YKY"));s.add(new String("LYH"));s.add(new String("HHH"));s.add(new String("YXM"));s.add(new String("YKY"));//System.out.println(s.size());//printprint1(s);System.out.println("-------------");print2(s);System.out.println("-------------");print3(s);}/*static void print(Collection<String> c){Iterator<String> it = c.iterator();while(it.hasNext()){String str = it.next();System.out.println(str);}}*/static <T> void print1(Collection<T> c){Iterator<T> it = c.iterator();while(it.hasNext()){T t = it.next();System.out.println(t);}}static <T> void print2(Collection<T> c){for(T t : c){System.out.println(t);}}static <T> void print3(Collection<T> c){c.forEach(new Consumer<T>(){public void accept(T t){System.out.println(t);}});}
    }
  • 运行结果:

16_HashSet中的哈希算法

  • HashSet(保证内容重复对象只有一个
    1. 覆盖 hashCode() 方法,保证 相同对象返回相同的int尽可能 保证 不同对象返回不同的int
    2. 覆盖 equals() 方法,保证 相同对象返回true
  • 代码:
    package day17;
    import java.util.HashSet;
    import java.util.Set;
    import java.util.Iterator;
    import java.util.Collection;
    import java.util.function.Consumer;
    public class TestHashSet{public static void main(String[] args){Set<Student> s = new HashSet<>();s.add(new Student("YKY", 15));s.add(new Student("LYH", 19));s.add(new Student("HHH", 19));s.add(new Student("YXM", 18));s.add(new Student("YKY", 15));print1(s);//System.out.println("-------------");//print2(s);//System.out.println("-------------");//print3(s);}/*static void print(Collection<String> c){Iterator<String> it = c.iterator();while(it.hasNext()){String str = it.next();System.out.println(str);}}*/static <T> void print1(Collection<T> c){Iterator<T> it = c.iterator();while(it.hasNext()){T t = it.next();System.out.println(t);}}static <T> void print2(Collection<T> c){for(T t : c){System.out.println(t);}}static <T> void print3(Collection<T> c){c.forEach(new Consumer<T>(){public void accept(T t){System.out.println(t);}});}
    }
    class Student{String name;int age;public Student(String name, int age){this.name = name;this.age = age;}@Overridepublic String toString(){return "Student [name="+name+",age="+age+"]";}@Overridepublic boolean equals(Object o){if(this == o) return true;if(o == null) return false;if(this.getClass() != o.getClass()) return false;Student s = (Student)o;if(this.name.equals(s.name) && this.age == s.age) return true;else return false;}@Overridepublic int hashCode(){return age;}
    }
  • 运行结果:

17_HashSet中的高级哈希算法

18_Set的其他实现类

  • LinkedHashSet
    • 是HashSet的子类
    • 维护元素添加到Set中的顺序
  • 代码:
    package day17;
    import java.util.LinkedHashSet;
    import java.util.Set;
    public class TestLinkedHashSet{public static void main(String[] args){Set<String> s = new LinkedHashSet<>();s.add("YKY");s.add("LYH");s.add("YXM");s.add("HHH");s.add("WKY");s.add("YKY");for(String s1 : s){System.out.println(s1);}}
    }
  • 运行结果:

  • TreeSet
  • 代码:
    package day17;
    import java.util.Set;
    import java.util.TreeSet;
    import java.util.Comparator;
    public class TestTreeSet{public static void main(String[] args){Comparator<Worker> c = new Comparator<Worker>(){/*if(w1<w2) return 负数if(w1>w2) return 正数if(w1==w2) return 0*/public int compare(Worker w1, Worker w2){if(w1.age != w2.age) return w1.age - w2.age;else return w1.name.compareTo(w2.name);}};Set<Worker> s = new TreeSet<>(c);s.add(new Worker("YKY", 20));s.add(new Worker("YXM", 19));s.add(new Worker("ZYK", 19));s.add(new Worker("HHH", 17));s.add(new Worker("LYH", 18));s.add(new Worker("YKY", 20));for(Worker w : s){System.out.println(w);}}
    }
    class Worker{String name;int age;public Worker(String name, int age){this.age = age;this.name = name;}@Overridepublic String toString(){return "Worker [name="+name+",age="+age+"]";}}
  • 运行结果:

19_Queue接口

20_Map的基本特点和遍历

  • 基本特点:
    • 元素是 key-value
    • key无顺序,不可重复
    • value无顺序,可重复
  • 常用方法:
    1. get(Object key): 通过key查找对应的value
    2. put(Object key, Object value): 将key-value添加到Map中,如果key已存在,新的value覆盖旧的value
    3. remove(Object key): 删除key所对应的key-value对
    4. size(): 长度
    5. containsKey(Object key): 判断key是否存在
    6. containsValue(Object value): 判断value是否存在
  • 遍历:
    1. keySet(): 返回Set,遍历Map中所有的key
    2. values(): 返回Collection,遍历Map中所有的value
    3. entrySet(): 返回Set,Set中的元素为Map.Entry对象,代表了一个键值对
  • 代码:
    package day17;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    import java.util.Collection;
    public class TestMap{public static void main(String[] args){Map<Integer, String> map = new HashMap<>();map.put(2008 , "北京");map.put(2012 , "伦敦");map.put(2016 , "里约热内卢");map.put(2020 , "东京");map.put(2024 , "巴黎");map.put(2028 , "洛杉矶");map.put(2004 , "雅典");map.put(2000 , "悉尼");map.put(1996 , "亚特兰大");map.put(1992 , "巴塞罗那");map.put(1988 , "首尔");map.put(1984 , "洛杉矶");map.put(1980 , "莫斯科");/*String s = map.get(2008);System.out.println(s);System.out.println(map.containsKey(1996));System.out.println(map.containsValue("东京"));*//*Set<Integer> keys = map.keySet();for(Integer key : keys){String value = map.get(key);System.out.println(key+"  ---  "+value);}*///print1(map);//print2(map);print3(map);}static <K, V> void print1(Map<K, V> map){Set<K> keys = map.keySet();for(K key : keys){V value = map.get(key);System.out.println(key+"  ---  "+value);}}static <K, V> void print2(Map<K, V> map){Collection<V> values = map.values();for(V value : values){System.out.println(value);}}static <K, V> void print3(Map<K, V> map){Set<Map.Entry<K, V>> set = map.entrySet();for(Map.Entry<K, V> me : set){K key = me.getKey();V value = me.getValue();System.out.println(key+"  ---  "+value);}}
    }
  • 运行结果:

21_JDK8中的Map遍历

22_Map的实现类

23_里氏代换原则

  • 定义:

    在定义继承关系时要 满足is a关系,具体的应用场景为,针对父类说一句话,把父类替换成子类,这句话要依然成立

24_不同版本的ArrayList初始长度

  • JDK8 初始长度为0(API文档是错的)
  • JDK6 初始长度为10
  • 学习时可以看Java实现源代码(最准确)

14_集合框架(续)相关推荐

  1. JAVA语言基础-面向对象(集合框架02List、泛型)

    2019独角兽企业重金招聘Python工程师标准>>> 16.01_集合框架(去除ArrayList中重复字符串元素方式)(掌握) A:案例演示 需求:ArrayList去除集合中字 ...

  2. 谈谈对集合框架的理解?

    集合框架包括集合不映射(Collection and Map) List 元素有先后次序的集合, 元素有 index 位置, 元素可以重复,继承自 Collection 接口,实现类: ArrayLi ...

  3. java基础知识总结:基础知识、面向对象、集合框架、多线程、jdk1.5新特性、IO流、网络编程

    目录 一.基础知识: 二.面向对象 三.集合框架 四.多线程: 五.jdk1.5的新特性 六.IO流 七.网络编程: 一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtua ...

  4. java api 框架_java常用对象API之集合框架

    说到集合框架,其实刚开始学的时候有点自我感觉很简单,自己认为就是集合类中的框架之类的,但是当自己简单把它过了一变后发现懵里懵懂的,什么都没懂,于是自己又认认真真的看了一遍,才弄明白. 说到集合框架就不 ...

  5. java实现用户登录注册功能(用集合框架来实现)

    需求:实现用户登录注册功能(用集合框架来实现) 分析: A:需求的类和接口 1.用户类 UserBean 2.用户操作方法接口和实现类 UserDao UserDaoImpl 3.测试类 UserTe ...

  6. Java集合框架综述,这篇让你吃透!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:平凡希 cnblogs.com/xiaoxi/p/60899 ...

  7. 【Java集合框架】ArrayList类方法简明解析(举例说明)

    本文目录 1.API与Java集合框架 2.ArrayList类方法解析 2.1 add() 2.2 addAll() 2.3 clear() 2.4 clone() 2.5 contains() 2 ...

  8. 面试宝典JAVA集合框架 List、Set、Map

    一.集合框架(*,必须掌握) 定义:集合与数组类似,只不过集合中的数据量可以动态的变化. 1.List集合:存放的数据可以重复,并且有顺序 ArrayList:底层是Object数组.增删很慢,查询很 ...

  9. Java集合框架的知识总结(1)

    Java集合框架的知识总结(1) 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量). Java的集合类主要由两个接口派生而出:Collection和Map,Collec ...

最新文章

  1. 谈一谈安防行业人工智能发展情况
  2. redis安全与管理
  3. PHP中的else怎么用,php中ifelse与elseif使用区别实例介绍
  4. 富丽的SUSE Linux 10.3(1)
  5. java map取第一个元素_Java 8从Map中的匹配值中提取第一个键
  6. HDU 3397 Sequence operation(线段树)
  7. Solidity编程 五 之 数据类型
  8. 工作记录软件app,可以写工作记录的便签软件
  9. 图像处理基础知识——图片存储形式、色域、图片文件格式
  10. WSL Ubuntu忘记root密码和用户密码
  11. 什么是buffer?
  12. IOS开发者账号申请步骤
  13. Excel如何打开两个独立窗口
  14. 使用BackTrack来增强电脑的安全
  15. Day794.如何用协程来优化多线程业务 -Java 性能调优实战
  16. 异常e.getMessage()与e.getCause().getMessage()的区别
  17. 易语言linux静态编译失败,易语言静态编译出现错误求解决
  18. 建设网站-个人电子图书馆
  19. error: ‘rclcpp::executor’ has not been declared思考与ROS2的版本号
  20. idea中HTML格式化时标签缩进问题

热门文章

  1. 郑伯克段于鄢隐公元年 《左传》
  2. 药明康德成都研发中心投入运营;中国白酒行业净利润将迎来七年来首次下滑 | 美通企业日报...
  3. 香港电台知名主持人梁继璋写给儿子的一封信
  4. Newman如何生成报告?
  5. 深入理解爬虫:网页分析||审查元素
  6. 做内容营销,需要注意什么?
  7. 【MQSQL】DDLDML
  8. java实现虹膜识别_江西HID虹膜识别报价
  9. armbian 斐讯n1_斐讯N1刷入Armbian 更换国内系统源更换国内软件源修改DNS
  10. [原创]HP DV2 1005AU 装机偶得