14_集合框架(续)
百知教育 - 孙帅 - 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的排序
排序
- Collections.sort(List):要求集合中的元素实现Comparable接口
- Collections.sort(List, Comparator):Comparator 比较器,实现排序逻辑;集合中的元素不需要实现Comparable接口
- 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接口中的方法:
实现类:
HashSet【重点】
Set遍历:
代码:
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(保证内容重复对象只有一个)
- 覆盖 hashCode() 方法,保证 相同对象返回相同的int,尽可能 保证 不同对象返回不同的int
- 覆盖 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中的高级哈希算法
eclipse中可自动生成较优的HashCode方法
代码(见上代码):
@Overridepublic int hashCode(){//return age+name.hashCode();//eclipse自动生成的hashCode实现代码final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}
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接口
Queue:
- 队列
- FIFO
常用方法:
- add(): 添加元素
- offer(): 添加元素 优先使用
- remove(): 删除元素
- poll(): 删除元素 优先使用
- element(): 获取队列的头元素
- peek(): 获取队列的头元素 优先使用
实现类:
LinkedList
代码:
package day17; import java.util.LinkedList; import java.util.Queue; public class TestQueue{public static void main(String[] args){Queue<String> q = new LinkedList<>();q.offer("YKY");q.offer("LYH");q.offer("HHH");//System.out.println(q.peek());String s1 = q.poll();String s2 = q.poll();String s3 = q.poll();System.out.println(s1);System.out.println(s2);System.out.println(s3);System.out.println(q.size());} }
运行结果:
20_Map的基本特点和遍历
基本特点:
- 元素是 key-value
- key无顺序,不可重复
- value无顺序,可重复
常用方法:
- get(Object key): 通过key查找对应的value
- put(Object key, Object value): 将key-value添加到Map中,如果key已存在,新的value覆盖旧的value
- remove(Object key): 删除key所对应的key-value对
- size(): 长度
- containsKey(Object key): 判断key是否存在
- containsValue(Object value): 判断value是否存在
遍历:
- keySet(): 返回Set,遍历Map中所有的key
- values(): 返回Collection,遍历Map中所有的value
- 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遍历
forEach()
实现 BiConsumer接口 ,直接遍历Map
代码(见上代码):
static <K, V> void print4(Map<K, V> map){map.forEach(new BiConsumer<K, V>(){public void accept(K key, V value){System.out.println(key+" --- "+value);}});}
22_Map的实现类
HashMap:
依靠 哈希算法 保证key不重复,JDK1.2、线程不安全、并发效率高、允许用null作为key或value
Hashtable(注意t小写):
LinkedHashMap:
HashMap的子类,维护元素添加 到集合中的 顺序
TreeMap:
Properties:
Hashtable的子类,key和value都是String,通常用于 配置文件的处理
23_里氏代换原则
定义:
在定义继承关系时要 满足is a关系,具体的应用场景为,针对父类说一句话,把父类替换成子类,这句话要依然成立。
24_不同版本的ArrayList初始长度
JDK8 初始长度为0(API文档是错的)
JDK6 初始长度为10
学习时可以看Java实现源代码(最准确)
14_集合框架(续)相关推荐
- JAVA语言基础-面向对象(集合框架02List、泛型)
2019独角兽企业重金招聘Python工程师标准>>> 16.01_集合框架(去除ArrayList中重复字符串元素方式)(掌握) A:案例演示 需求:ArrayList去除集合中字 ...
- 谈谈对集合框架的理解?
集合框架包括集合不映射(Collection and Map) List 元素有先后次序的集合, 元素有 index 位置, 元素可以重复,继承自 Collection 接口,实现类: ArrayLi ...
- java基础知识总结:基础知识、面向对象、集合框架、多线程、jdk1.5新特性、IO流、网络编程
目录 一.基础知识: 二.面向对象 三.集合框架 四.多线程: 五.jdk1.5的新特性 六.IO流 七.网络编程: 一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtua ...
- java api 框架_java常用对象API之集合框架
说到集合框架,其实刚开始学的时候有点自我感觉很简单,自己认为就是集合类中的框架之类的,但是当自己简单把它过了一变后发现懵里懵懂的,什么都没懂,于是自己又认认真真的看了一遍,才弄明白. 说到集合框架就不 ...
- java实现用户登录注册功能(用集合框架来实现)
需求:实现用户登录注册功能(用集合框架来实现) 分析: A:需求的类和接口 1.用户类 UserBean 2.用户操作方法接口和实现类 UserDao UserDaoImpl 3.测试类 UserTe ...
- Java集合框架综述,这篇让你吃透!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:平凡希 cnblogs.com/xiaoxi/p/60899 ...
- 【Java集合框架】ArrayList类方法简明解析(举例说明)
本文目录 1.API与Java集合框架 2.ArrayList类方法解析 2.1 add() 2.2 addAll() 2.3 clear() 2.4 clone() 2.5 contains() 2 ...
- 面试宝典JAVA集合框架 List、Set、Map
一.集合框架(*,必须掌握) 定义:集合与数组类似,只不过集合中的数据量可以动态的变化. 1.List集合:存放的数据可以重复,并且有顺序 ArrayList:底层是Object数组.增删很慢,查询很 ...
- Java集合框架的知识总结(1)
Java集合框架的知识总结(1) 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量). Java的集合类主要由两个接口派生而出:Collection和Map,Collec ...
最新文章
- 谈一谈安防行业人工智能发展情况
- redis安全与管理
- PHP中的else怎么用,php中ifelse与elseif使用区别实例介绍
- 富丽的SUSE Linux 10.3(1)
- java map取第一个元素_Java 8从Map中的匹配值中提取第一个键
- HDU 3397 Sequence operation(线段树)
- Solidity编程 五 之 数据类型
- 工作记录软件app,可以写工作记录的便签软件
- 图像处理基础知识——图片存储形式、色域、图片文件格式
- WSL Ubuntu忘记root密码和用户密码
- 什么是buffer?
- IOS开发者账号申请步骤
- Excel如何打开两个独立窗口
- 使用BackTrack来增强电脑的安全
- Day794.如何用协程来优化多线程业务 -Java 性能调优实战
- 异常e.getMessage()与e.getCause().getMessage()的区别
- 易语言linux静态编译失败,易语言静态编译出现错误求解决
- 建设网站-个人电子图书馆
- error: ‘rclcpp::executor’ has not been declared思考与ROS2的版本号
- idea中HTML格式化时标签缩进问题
热门文章
- 郑伯克段于鄢隐公元年 《左传》
- 药明康德成都研发中心投入运营;中国白酒行业净利润将迎来七年来首次下滑 | 美通企业日报...
- 香港电台知名主持人梁继璋写给儿子的一封信
- Newman如何生成报告?
- 深入理解爬虫:网页分析||审查元素
- 做内容营销,需要注意什么?
- 【MQSQL】DDLDML
- java实现虹膜识别_江西HID虹膜识别报价
- armbian 斐讯n1_斐讯N1刷入Armbian 更换国内系统源更换国内软件源修改DNS
- [原创]HP DV2 1005AU 装机偶得