JAVA小白的学习总结第五周
1.TreeSet集合
本质基于TreeMap的底层实现(红黑树结构---->自平衡"的二叉树结构")
有两种排序方式:
自然排序
选择器排序
什么时候使用者两种排序:
取决于创建当前Set集合对象的时候的构造方法
public TreeSet():默认的自然顺序排序
TreeSet<Integer>
由于TreeSet属于Set集合(本身保证元素唯一,不重复的元素!),所以可以将元素按照自然顺序排序
代码体现
public class TreeSetDemo {public static void main(String[] args) {//创建一个TreeSet集合对象//public TreeSet():默认的自然顺序排序TreeSet<Integer> ts = new TreeSet<Integer>(); //无参构造方法:自然排序//添加元素ts.add(20) ;ts.add(17) ;ts.add(24) ;ts.add(18) ;ts.add(17) ;ts.add(23) ;ts.add(24) ;//遍历这个集合for(Integer i : ts) {System.out.print(i+" "); }}
}/*
输出结果为: 17 18 20 23 24*/
有参构造
代码体现
/** 使用TreeSet集合存储自定义对象并遍历* 主要条件: 学生年龄的从小到大排序* 使用比较器排序完成* TreeSet集合有参构造方法* public TreeSet(Comparator<? super E> comparator)* * */
public class TreeSetDemo {public static void main(String[] args) {//public TreeSet(Comparator<? super E> comparator)//创建TreeSet集合//方式1:直接给了创建了接口子实现类//TreeSet<Student> ts = new TreeSet<Student>(new MyComparator()) ;//形式参数是一个接口类型,需要传递该接口子实现类对象//方式2:形参参数如果接口:传入接口的匿名内部类(本质:接口的子实现类)//匿名内部类(推荐的方式)/** 匿名内部类的格式:* new 类名/接口名(){* 重写抽象类中或者接口中的抽象方法...* };* */TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {//主要条件: 学生年龄的从大到小排序//s1---->this//s2---->sint num = s2.getAge() - s1.getAge() ;//学生年龄相同,比较姓名是否一样int num2 = (num==0) ? (s1.getName().compareTo(s2.getName())): num ;return num2; }}) ;//添加元素Student s1 = new Student("gaoyuanyuan",41) ;Student s2 = new Student("gaoyuanyuan",41) ;Student s3 = new Student("dengchao",37) ;Student s4 = new Student("zhangyio",37) ;Student s5 = new Student("wuqilong",50) ;Student s6 = new Student("zhangguorong",20) ;Student s7 = new Student("bybyzsd",29) ;//添加集合中ts.add(s1) ;ts.add(s2) ;ts.add(s3) ;ts.add(s4) ;ts.add(s5) ;ts.add(s6) ;ts.add(s7) ;//遍历for(Student s: ts) {System.out.println(s.getName()+"---"+s.getAge());}}
}// 学生类public class Student {//提供两个属性private String name ;private int age ;public Student() {super();}//有参构造public Student(String name, int age) {super();this.name = name;this.age = age;}//公共访问方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//重写toSttring方法@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}
}
2.Map集合
java.util.Map<K,V>:接口
Map集合的功能
Map集合的功能:添加功能V put(K key, V value) :添加一个键值对元素问题:返回值是什么意思 /如果当前键是一次存储的时候,返回的结果null//如果键是不是第一次存储,后面重复,将当前对应的值把以前的值覆盖掉并保存下来,返回以前的值!刪除功能:V remove(Object key):刪除指定的键,返回的是跟键关联的值,如果没有映射关系,则返回nullvoid clear():删除全部的键以及值判断功能boolean containsKey(Object key):是否包含指定的键boolean containsValue(Object value):是否包含指定的值boolean isEmpty():判断Map集合是否为空
Map集合功能的代码体现
public class MapDemo {public static void main(String[] args) {//Map集合不能直接实例化//HashMap:哈希表结构:保证元素(键:唯一),不能保证迭代顺序恒久不变Map<String,String> map = new HashMap<String,String>() ;//System.out.println(map);//V put(K key, V value) :添加一个键值对元素//System.out.println(map.put("杨过", "小龙女")) ;/*map.put("杨过", "小龙女") ;map.put("胡歌", "王晓晨") ;map.put("陈玄风", "梅超风") ;map.put("赵又廷", "高圆圆") ;*///如果当前键是一次存储的时候,返回的结果null//如果键是不是第一次存储,后面重复,将当前对应的值把以前的值覆盖掉并保存下来,返回以前的值!System.out.println(map.put("文章", "马伊琍")) ; System.out.println(map.put("文章", "姚笛"));System.out.println(map);System.out.println("---------------------");//V remove(Object key)//System.out.println(map.remove("杨过"));//void clear():删除全部的键以及值//map.clear();//boolean containsKey(Object key):是否包含指定的键//boolean containsValue(Object value):是否包含指定的值System.out.println(map.containsKey("黄晓明"));System.out.println(map.containsKey("赵又廷"));System.out.println(map.isEmpty());System.out.println(map);}
}
Map集合的高级功能
高级功能:方式1:(推荐的方式:Map常用的方式)Set<K> keySet():获取所有的键的集合V get(Object key):通过键获取对应的值
编译方式一:
public class MapDemo2 {public static void main(String[] args) {//创建Map集合对象Map<String,String> map = new HashMap<String,String>() ;//添加键值对元素map.put("郭靖", "黄蓉") ;map.put("杨过", "小龙女") ;map.put("令狐冲", "任盈盈") ;map.put("陈玄风", "梅超风") ;//遍历Map集合//方式1:Set<K> keySet():获取所有的键的集合Set<String> set = map.keySet() ;//通过键在值for(String key : set) {//通过键获取值
// V get(Object key):通过键获取对应的值String value = map.get(key) ;System.out.println(key+"="+value);}}
}
遍历方式二:
/** 方式2遍历* Set<Map.Entry<K,V>> entrySet():获取当前Map集合中所有的键值对对象* * K getKey() :通过键值对对象获取键* V getValue():通过键值对对象获取值* * */
public class MapDemo3 {public static void main(String[] args) {//创建Map集合Map<String,String> map = new HashMap<String,String>() ;//添加元素map.put("郭靖", "黄蓉") ;map.put("杨过", "小龙女") ;map.put("令狐冲", "任盈盈") ;map.put("陈玄风", "梅超风") ;//方式2://获取所有的键值对对象Set<Map.Entry<String, String>> entrySet = map.entrySet() ;//遍历for(Map.Entry<String, String> entry :entrySet) {//获取到了所有的键值对对象:一一获取//K getKey():通过键值对对象获取键String key = entry.getKey() ;//V Value():通过键值对对象获取值String value = entry.getValue() ;System.out.println(key+"="+value);}}
}
HashMap<K,V>
HashMap<K,V>是Map集合的子实现类,里面哈希表结构,保证(键唯一)
/** * Map集合只只针对键有效* HashMap<Integer,String>键:Integer* * HashMap<String,Student> :键:String* HashMap<Student,String>:键是自定义对象***** 对于Map存储的键如果是自定义对象:该自定义对象的所在类必须重写Object:equals()和hashCode()* 会依赖于HashMap的put方法* hash()---->依赖于hashCode():算出每一个对象哈希码值一样* putValue()---->equals()方法:哈希码值一样,还有比较每一个成员信息是否相同!* */
public class HashMapDemo {public static void main(String[] args) {//创建HashMap集合对象HashMap<Integer,String> hm = new HashMap<Integer,String>() ;//添加元素hm.put(1, "马云") ;hm.put(2, "雷军") ;hm.put(3, "罗永浩") ;hm.put(4, "刘强东") ;hm.put(5, "裘博君") ;hm.put(1, "李嘉城") ;//遍历//获取所有的键Set<Integer> set = hm.keySet() ;for(Integer key :set) {//通过键获取值String value = hm.get(key) ;System.out.println(key+"----"+value);}}
}/*
输入结果为:
1----李嘉城
2----雷军
3----罗永浩
4----刘强东
5----裘博君
*/
Collections类
/*** Collections:java.util.Collections 类* 可以针对Collection集合进行操作的工具类!* * public static <T> int binarySearch(List<?> list,T key):针对集合的二分查询方法:* 查询key在集合中出现的索引值* public static <T> T max(Collection<? extends T> list):获取集合中最大值* public static <T> T min(Collection<? extends T> list):获取集合中最小值* public static <T> void sort(List<T> list):针对List集合进行排序:升序排序* public static <T> void sort(List<T> list,Comparator<T> com):比较器排序* public static void shuffle(List<?> list):针对List集合的元素进行随机置换* * @author zhangyang**/
public class CollectionsDemo {public static void main(String[] args) {//创建List集合对象List<Integer> list = new ArrayList<Integer>() ;//添加元素list.add(10) ;list.add(20) ;list.add(50) ;list.add(25) ;list.add(5) ;list.add(15) ;list.add(75) ;System.out.println(list);System.out.println("---------------------------------");//public static <T> void sort(List<T> list):针对List集合进行排序:升序排序Collections.sort(list);System.out.println(list);//public static <T> int binarySearch(List<?> list,T key)//二分搜索法:集合:必须是有序的!:查询25这个元素在有序集合出现的索引值System.out.println("binartSeach():"+Collections.binarySearch(list, 25));System.out.println("----------------------------------");// public static <T> T max(Collection<? extends T> list)System.out.println("max():"+Collections.max(list));System.out.println("----------------------------------");//public static void shuffle(List<?> list):Collections.shuffle(list);System.out.println(list);}
}
3.多线程
线程和进程的概念
什么是线程,
线程是依赖于进程的,将线程看成是进程中某个"任务"
什么是进程:
本地开启一个客户端,就是一个进程 "任务管理器"!
能够调用系统资源的独立单位
多进程的意义?
多进程的意义:就是为了提高cpu的使用率!
举例:
现在大部分计算机都是多进程的计算机!
打游戏的同时,可以听音乐.. 这两个进程是同时的吗?
这两个进程不是同时进行的,它是在两个进程之前抢占cpu的时间片!
(两个进程之间高效的来回切换...)
线程
线程---->理解为 进程的中的任务
举例:
360软件
开启360----开启一个进程
杀毒的同时可以清理内存...
迅雷下载电视剧:30集
多线程的意义呢?
每个线程为了抢占CPU的执行权,他们的抢占过程中具有随机性!
举例
1 v 5打篮球
5个人抢占篮球的几率大,但是一定抢占到吗?
不一定能够一直能抢占到! 线程的执行具有随机性!
jvm:是假想计算机---开启对应进程
jvm:里面至少有两条线程
main方法: 主线程----"用户线程"
垃圾回收线程:产生很多对象的时候,需要通过gc回收没有更多引用的对象!
public staic void main(String[] args){
new Object() ;
new Object() ;
....
FileInputStream fis = new FileInputStream("d:\\a.txt") ;
}
线程的几种状态
State:线程的状态:是Thread类内部枚举public enum State {NEW, 线程新建状态 ---->public static final...RUNNABLE,线程运行状态BLOCKED,线程阻塞状态(sleep(),等待)WAITING,//死死等待TIMED_WAITING,//超时等待 等待到一定时间,不等了TERMINATED;//线程终止!}
多线程实现方式一和实现方式二的对比:
方式1:1)自定义一个类MyThread,继承自 Thread 2)重写Thread类中run方法3)在main中,创建该线程类对象MyThread my1 = new MyThread() ;MyThread my2 = new MyThread() ;MyThread my3 = new MyThread() ;my1.start();my2.start() ;my3.start() ;my1,my2在并发的执行继承关系的弊端:局限性它不能够体现出"数据共享"的概念!电影卖票:100张票 三个窗口每一个窗口可能都在卖自己的100张票线程的执行 "随机性"原子性操作:100张: 变量tickets (tickets--) 100 --- 99栈内存 堆内存MyThread my1 new MyThread() ;MyThread my2 new MyThread() ;MyThread my3 new MyThread() ;第二种方式优势:静态代理能够体现出 "资源共享"1)自定义一类MyRunnable implements Runnable2)重写run方法3)创建资源类对象,创建线程类对象,将资源类对象当做参数传递MyRunnable my = new MyRunnable() ;// public Thread(Runnable target, String name) :创建线程类对象并同时给线程设置名称Thread t1 = new Thread(my, "窗口1") ;Thread t2 = new Thread(my, "窗口2") ;Thread t3 = new Thread(my, "窗口3") ;//启动线程t1.start();t2.start();t3.start();栈内存中 堆内存中Thread t1 new Thread(0x01) Thread(Runnable runable)Thread t2 ....Thread t3 ...MyRunnable my(0x01) ------> new MyRunnable()
JAVA小白的学习总结第五周相关推荐
- 豚鼠学习html第五周
豚鼠学习html第五周 一. 1. b与i标签 2.引用标签的基本操作 3.ifarm嵌套内容 4.pr与wbr标签 5.pre与code标签 6.map与area 7.embed与object标签 ...
- Java小白入门——学习感受随笔
Java小白入门--学习感受随笔 浅谈为何想学Java? 这篇博客是为了大多数和我一样的入门小白或者即将入门的萌新们写的,其实在刚接触编程的时,仅仅是凭着<微微一笑很倾城>的肖奈的喜爱,便 ...
- java小白的学习历程
一. JDK (Java Development Kit) JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库( ...
- OUC暑期培训(深度学习)——第五周学习记录:ShuffleNet EfficientNet 迁移学习
第五周学习:ShuffleNet & EfficientNet & 迁移学习 Part 1 视频学习 1.ShuffleNet V1 ShuffleNet和MobileNet一样想,应 ...
- java min 函数的使用方法_【Python】Java程序员学习Python(五)— 函数的定义和使用...
不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍, ...
- java小白的学习自述(大三)
自我介绍 本人是广州普通二本(2b)的大三在校生.因为过了12点又老一岁,就有感而发,想记录一下自己这一年多的java学习之旅和感想. 学习之初 我是大二开始学习编程的,因为大一比较浪,逃课,挂科什么 ...
- JAVA小白的学习总结第四周
1.一些常用类的列举 1.1常用类之String 一些基本概念:String 类代表字符串;字符串是常量:它们的值在创建之后不能更改(常量的地址值) String类是一个特殊的引用类型 : ...
- Java小白的学习笔记(七)——浅谈JSON
JSON:JSON是一种与开发语言无关的轻量级的数据格式全称是:JavaScript Object Notation.可以说他是一种数据格式的标准,或者规范. JSON的优点:易于人的阅读和编写,易于 ...
- Java小白的学习之路——day03
目录 一.类型转换 1.转换规则以及强转隐患 二.运算符 1.算术运算符 2.赋值运算符 3.关系运算符 4.关系运算符 5.三目运算符 三.类型提升与控制台录入 1.类型提升 2.控制台录入 四.I ...
最新文章
- show在php,show.php
- SAP战略中的机器学习
- 创业公司CEO每天应该做的13件事
- docker常用命令(总结)
- TensorFlow基础笔记(5) VGGnet_test
- MySQL之mysqldump的使用
- 成功解决1406, “Data too long for column ‘txt‘ at row 1“
- Pytorch基本变量类型FloatTensor与Variable
- android 测试获取context,Android单元测试获取context问题,用AndroidTestCase获取为空
- 如何申请公网IP资源
- ajax批量上传数据,Ajax上传数据和上传文件(三种方式)
- C# BitConverterExt 对BitConverter的GetBytes 方法扩展
- 微信小程序之分包加载
- R | Rstudio安装 |Rstudio空白及显示无法访问此网站
- 文档管理系统OnlyOffice在线编辑功能
- Cadence原理图DRC检查介绍
- 软件设计模式——适配器模式
- PHP - 表单(FORM)实例
- 网站移至俄语服务器日期错误_se7en3_新浪博客
- Spring学习记录