- 一、java基础
- 二、数据类型(八大基本数据类型)
- 三、 基本运算符
- 四、包机制
- 五、生成JavaDoc
- 六、流程控制
- 八、数组
- 九、面向对象
- 十、集合
- 10.1 集合类体系结构
- 10.2 Collection的创建和使用
- 10.5 Collection集合的使用步骤
- 10.6 Collection使用学生对象来存储
- 10.7 List集合的概述和特点
- 10.8 List的特殊方法
- 10.10 列表迭代器
- 10.11 增强for循环
- 10.12 List的三种遍历方式
- 10.13 常见数据结构之栈
- 10.14 常见数据结构之队列
- 10.13 常见数据结构之数组
- 10.14 常见数据结构之链表
- 10.15 List集合子类特点
- 10.16 LinkedList集合的特有功能
- 10.17 set集合概述和特点
- 10.18 哈希值
- 10.18 HashSet集合概述和特点
- 10.19 HashSet集合保证元素唯一性-源码解析
- ">
- 10.20 常见数据结构之哈希表
- 10.21 HashSet集合存储学生对象并遍历
- 10.21 linkedHaset集合概述和特点
- 10.22 treeSet集合概述和特点
- 10.23 自然排序Comparable的使用
- 10.21 比较器Comparable的使用
- 十一、泛型
- 十二、Map
一、java基础
1.1 java关键字
1.2 标识符
二、数据类型(八大基本数据类型)
2.1 什么是字节
package day1;
public class demo1 {
public static void main(String[] args) {
// 八大基本数据类型
int age =22;
long ll = 222232323232L;
short sht ='a';
// String name= "阿飞";
float scope = 22.2F;
double saly = 22.1;
boolean isTrue = true;
char chs = 'A';
byte b = 123;
}
}
2.2 类型转换
2.3 变量
2.4 常量
三、 基本运算符
- 三元运算符 条件 ?x:y
四、包机制
五、生成JavaDoc
5.1 cmd生成
javadoc -encoding UTF-8 -charset UTF-8 Doc.java
5.2 idea生成
详情链接:https://blog.csdn.net/qq_29347295/article/details/78635861
六、流程控制
6.1 scanner对象
package day1;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args) {
//获取用户键盘的输入
Scanner scanner = new Scanner(System.in);
// 拿到用户输入的数据
String str =scanner.nextLine();
System.out.println(str);
// 关闭输入流
scanner.close();
}
}
6.2 scanner进阶(计算数字之和)
package day1;
import java.util.Scanner;
public class ScannerT {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int sum = 0;
int num = 0;
// 计算树数字之和
// 判断用户是不是数字,如果不是返回结果
while (scanner.hasNextInt()){
int userin = scanner.nextInt();
num+=userin;
sum++;
}
System.out.println(sum);
System.out.println(num);
}
}
6.3 顺序结构
6.4 if单选择结构
6.5 switch多选择结构
6.6 while循环
6.7 do while循环
6.8 for循环(重点)
- 九九乘法表 ```java package day1;
public class Fortest { public static void main(String[] args) {
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= j; i++) {
System.out.print(i + "*" + j + "=" + (j * i)+"\t");
}
System.out.println();
}
}
}
<a name="gNHyu"></a>
#### 6.9 增强for循环
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618043481697-cbc1af06-8d0a-49b7-a9ce-8f9ddda9ec52.png#align=left&display=inline&height=538&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1076&originWidth=2280&size=784325&status=done&style=none&width=1140)
<a name="efFTd"></a>
#### 6.10 break continue
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618043781270-37ccd461-f157-4e14-b6c9-8181aff928ec.png#align=left&display=inline&height=541&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1082&originWidth=1880&size=1598099&status=done&style=none&width=940)
<a name="WSUwA"></a>
### 七、方法
<a name="EexD2"></a>
#### 7.1 什么是方法
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618052223665-231195c7-562a-4e2b-a3fd-16ef5869b47c.png#align=left&display=inline&height=404&margin=%5Bobject%20Object%5D&name=image.png&originHeight=808&originWidth=2218&size=654736&status=done&style=none&width=1109)
<a name="yVBPl"></a>
#### 7.2 方法的定义
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618052278637-0157fbfd-4019-4e28-bcf7-e54b70ad8ce3.png#align=left&display=inline&height=606&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1212&originWidth=2420&size=1445076&status=done&style=none&width=1210)
<a name="VLhLM"></a>
#### 7.3 方法的调用
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618052769155-eecc31f7-bb36-419a-ba99-4bfcb46a3b8e.png#align=left&display=inline&height=436&margin=%5Bobject%20Object%5D&name=image.png&originHeight=872&originWidth=1302&size=676459&status=done&style=none&width=651)
<a name="yJbO2"></a>
#### 7.4 方法的重载
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618116870884-0f9c8e3e-b6bc-4891-9c45-8fd11ae89a47.png#align=left&display=inline&height=520&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1040&originWidth=2266&size=666606&status=done&style=none&width=1133)
<a name="YMyhh"></a>
#### 7.5 命令行传参
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618117161150-8ecd9237-ffa7-4429-bb9a-d14572e104b9.png#align=left&display=inline&height=464&margin=%5Bobject%20Object%5D&name=image.png&originHeight=928&originWidth=2168&size=641844&status=done&style=none&width=1084)
<a name="o6Q5l"></a>
#### 7.6 可变参数
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618117485782-41573eb1-89e9-4987-88ce-91d782272565.png#align=left&display=inline&height=544&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1088&originWidth=2238&size=811759&status=done&style=none&width=1119)
```java
package day1;
public class demo03 {
public static void main(String[] args) {
test(1, 3, 4, 5, 56, 6);
}
/**
* @不定长参数
*/
public static void test(int... i) {
for (int j = 0; j < i.length; j++) {
System.out.println(i[j]);
}
}
}
7.7 递归
package day1;
public class demo3 {
public static void main(String[] args) {
System.out.println(test(1));
}
//测试递归,求阶乘
public static int test(int n){
if (n==1){
return 1;
}else {
return n*test(n-1);
}
}
}
八、数组
8.1 数组的定义
8.2 数组声明创建
8.3 数组的三种初始化
8.4 数组的四个基本特点
8.5 数组边界
8.6 多维数组
package day1;
public class demo4 {
public static void main(String[] args) {
// 多维数组
// 遍历多维数组的值
int[][] arr= {{1,3},{2,34,5},{4,3}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j <arr[i].length ; j++) {
System.out.println(arr[i][j]);
}
}
}
}
8.7 Arrays类详解
九、面向对象
9.1 思想
9.2 什么是面向对象
9.3 类和对象的关系
9.4 构造器详解
package demo2;
public class Person {
String name;
int age;
// 默认无参构造器,如果有有参,无参构造器就会消失,需要手动定义
public Person(){
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
9.5 对象内存分析
9.6 封装
package demo2;
public class Person {
private String name;
private int age;
// 默认无参构造器,如果有有参,无参构造器就会消失,需要手动定义
public Person(){
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name){
this.name =name;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
9.7 继承
9.8 super
9.9 重写
9.10 多态
package demo3;
public class Test {
public static void main(String[] args) {
Student s1 = new Student();
Person s2 = new Student();
s1.eat();
}
}
9.11 instance 引用类型转换
- 可以通过instance来判断2个类是否存在父子关系
package demo3;
public class Test {
public static void main(String[] args) {
// 低转高自动转型
// Student s1 = new Student();
// Person person = s1;
// 高转低强制转换
Person person = new Student();
Student s1 = (Student) person;
s1.say();
}
}
9.12 抽象类
抽象类注意事项:
- 不能new这个抽象类,只能靠子类去实现它:约束!
- 抽象类中可以写普通方法
- 抽象方法必须在抽象类中
- 抽象类有无参构造器
案例:
- 定义一个抽象类Person,里面有个抽象方法doSomeThing ```java package demo04;
public abstract class Person { // public abstract void doSomeThing(); }
2. 定义一个Student类继承Person,需要重写里面的所有方法
```java
package demo04;
public class Student extends Person{
@Override
public void doSomeThing() {
System.out.println(5555);
}
}
9.13 接口的定义与实现
接口的注意事项:
- 约束
- 定义一些方法,让不同的人去实现~10>1
- 里面方法必须是抽象方法 public abstract
- 里面的属性都是静态常量 public static final
- 结构不能对实例化,结构没有构造方法
- 实现implements可以实现多个接口
- 必须重写接口中的方法
案例:
- 定义2个接口分别是PersonService和UserService,里面分别有鸽子的抽象方法 ```java package demo05;
public interface PersonService { void edit(); }
```java
package demo05;
public interface UserService {
// 里面的属性都是静态常量 public static final
static final int NUM = 0;
// 里面的方法 都是 public abstract 可以省略 没有方法体,可以有参数
void add(String name);
void delete(String name);
void change(String name);
void select(String name);
}
定义一个实现类来实现PersonService和UserService,并且重写他们的全部方法 ```java package demo05; //必须重写接口所有的方法 public class UserServiceImpl implements UserService,PersonService {
@Override public void add(String name) {
}
@Override public void delete(String name) {
}
@Override public void change(String name) {
}
@Override public void select(String name) {
}
@Override public void edit() {
} }
<a name="0VMMf"></a>
#### 9.14 异常
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618279751470-235a0d0d-b715-419e-82f4-cf78e6fbe1b1.png#align=left&display=inline&height=363&margin=%5Bobject%20Object%5D&name=image.png&originHeight=884&originWidth=2230&size=923679&status=done&style=none&width=916)
<a name="eAR0Q"></a>
#### 9.15 异常-体系架构
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618280109612-5e34022c-dba5-4e38-b0dd-7c1b416da06a.png#align=left&display=inline&height=573&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1146&originWidth=1902&size=690551&status=done&style=none&width=951)
<a name="ys71C"></a>
#### 9.16 异常-ERROR
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618280339667-42bad6b7-d59b-45e8-a7ed-8ef4d027f06d.png#align=left&display=inline&height=403&margin=%5Bobject%20Object%5D&name=image.png&originHeight=806&originWidth=2344&size=763306&status=done&style=none&width=1172)
<a name="bcjyF"></a>
#### 9.17 异常-Exception
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618280379621-4b6ba20c-6d25-4fe0-8061-5a401b23659c.png#align=left&display=inline&height=578&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1156&originWidth=2276&size=1057996&status=done&style=none&width=1138)
<a name="AypgI"></a>
#### 9.18 异常-捕获-抛出
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618280619542-8943601f-c01e-48dc-89dc-13fd44597317.png#align=left&display=inline&height=315&margin=%5Bobject%20Object%5D&name=image.png&originHeight=630&originWidth=1024&size=172975&status=done&style=none&width=512)
```java
package demo6;
public class TestException {
public static void main(String[] args) {
int a=1;
int b=0;
// 调用异常的方法需要接收异常
try {
new TestException().test(1, 3);
} catch (Exception e) {
e.printStackTrace();
} finally {
}
try{
// 可能出现异常的代码
System.out.println(a/b);
}catch (ArithmeticException e){
// 定义多个异常,异常等级从小到大
System.out.println("捕获到异常了ArithmeticException");
}catch (Exception e){
System.out.println("捕获到异常了ArithmeticExceptionException");
}catch (Throwable e){
System.out.println("捕获到异常了Throwable");
}
finally {
System.out.println("无论什么情况都会执行");
}
}
// 抛出异常的方法
public void test(int a,int b)throws Exception{
// 在方法中定义异常
throw new ArithmeticException();
}
}
9.19 异常-自定义异常
9.19 异常总结
9.20 基本包装类型
9.21 integer类的概述和使用
9.21 包装类-int和String 的相互转换
9.22 包装类-自动装箱和拆箱
十、集合
10.1 集合类体系结构
import java.util.ArrayList; import java.util.Collection;
public class TestConnection { public static void main(String[] args) {
Collection<String> c1 = new ArrayList<>();
c1.add("你好我是collection");
c1.add("你好我是collection");
c1.add("你好我是collection");
System.out.println(c1);
}
}
<a name="pcCco"></a>
#### 10.3 Collection的常用方法
![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618301234264-68a926fd-8517-4be2-859e-15dc100d621c.png#align=left&display=inline&height=397&margin=%5Bobject%20Object%5D&name=image.png&originHeight=794&originWidth=1682&size=465150&status=done&style=none&width=841)
<a name="MeaZW"></a>
#### 10.4 Collection集合的遍历
```java
package demo7;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class TestConnection {
public static void main(String[] args) {
Collection<String> c1 = new ArrayList<>();
c1.add("你好我是collection1");
c1.add("你好我是collection2");
c1.add("你好我是collection3");
// 使用 iterator()
// 返回此集合中的元素的迭代器
Iterator<String> iterator = c1.iterator();
// hasNext()
// 如果迭代具有更多元素,则返回 true 。
// 使用迭代器遍历里面的元素
// next()
// 返回迭代中的下一个元素。
while (iterator.hasNext()) {
// next()
// 返回迭代中的下一个元素。
String str = iterator.next();
System.out.println(str);
}
}
}
10.5 Collection集合的使用步骤
10.6 Collection使用学生对象来存储
- 定义一个学生类,里面有2个属性,并且有有参无参构造器和get,set方法 ```java package demo7;
public class Student { private String name; private int age;
public Student() {
}
public Student(String name, int age) {
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;
}
}
2. 主方法
```java
package demo7;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class TestCollection {
public static void main(String[] args) {
//定义一个Student类的集合
Collection<Student> coll = new ArrayList<>();
// 定义三个学生
Student s1 = new Student("周杰伦", 12);
Student s2 = new Student("林俊杰", 15);
Student s3 = new Student("蔡徐坤", 16);
//将三个学生添加到集合
coll.add(s1);
coll.add(s2);
coll.add(s3);
// 拿到集合的可迭代对象
Iterator<Student> iterator = coll.iterator();
// 遍历可迭代对象
while (iterator.hasNext()){
Student next = iterator.next();
System.out.println(next.getName()+next.getAge());
}
}
}
10.7 List集合的概述和特点
package demo7;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestList {
public static void main(String[] args) {
// 有序列表可重复
List<String> list=new ArrayList<>();
list.add("张飞");
list.add("关羽");
list.add("张飞");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String next = iterator.next();
System.out.println(next);
}
}
}
10.8 List的特殊方法
- 遍历List的列表最使用 for > list.size()
package demo7;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestList {
public static void main(String[] args) {
// 有序列表可重复
List<String> list=new ArrayList<>();
list.add("张飞");
list.add("关羽");
list.add("张飞");
// Iterator<String> iterator = list.iterator();
// while (iterator.hasNext()){
// String next = iterator.next();
// System.out.println(next);
//
//
// }
// 新增元素在下标1
// list.add(1,"苟福成");
// 删除指定下标元素
// list.remove(2);
// System.out.println(list);
// 修改指定下标元素
// list.set(1,"草上飞");
// System.out.println(list);
// 根据指定下表返回元素
// String s = list.get(1);
// System.out.println(s);
// 遍历List可以使用get配合list.size()
for (int i = 0; i <list.size(); i++) {
System.out.println(list.get(i));
}
}
}
10.10 列表迭代器
10.11 增强for循环
10.12 List的三种遍历方式
package demo7;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class TestThree {
public static void main(String[] args) {
List<Student> coll = new ArrayList<Student>();
// 定义三个学生
Student s1 = new Student("周杰伦", 12);
Student s2 = new Student("林俊杰", 15);
Student s3 = new Student("蔡徐坤", 16);
coll.add(s1);
coll.add(s2);
coll.add(s3);
// 使用迭代器遍历
Iterator<Student> iterator = coll.iterator();
while (iterator.hasNext()){
Student stu = iterator.next();
System.out.println(stu.getName());
System.out.println(stu.getAge());
}
System.out.println("=====================================");
// 使用for 下标遍历
for (int i = 0; i < coll.size(); i++) {
System.out.println(coll.get(i).getName());
System.out.println(coll.get(i).getAge());
}
System.out.println("=====================================");
// 使用增强for循环遍历
for (Student student : coll) {
System.out.println(student.getName());
System.out.println(student.getAge());
}
}
}
10.13 常见数据结构之栈
10.14 常见数据结构之队列
10.13 常见数据结构之数组
10.14 常见数据结构之链表
10.15 List集合子类特点
l
练习:
package demo7;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
public class TestLink {
public static void main(String[] args) {
// 查询快增删慢
ArrayList<String> str = new ArrayList<>();
str.add("张飞");
str.add("刘备");
str.add("关羽");
System.out.println("====================================");
// 迭代器遍历
Iterator<String> striter = str.iterator();
while (striter.hasNext()){
String next = striter.next();
System.out.println(next);
}
System.out.println("====================================");
// 索引下标遍历
for (int i = 0; i < str.size(); i++) {
String s = str.get(i);
System.out.println(s);
}
// 增强for
for (String s : str) {
System.out.println(s);
}
System.out.println("====================================");
// linklist查询慢增删快
LinkedList<String> link = new LinkedList<>();
link.add("周杰伦1");
link.add("周杰伦2");
link.add("周杰伦3");
Iterator<String> linkiter = link.iterator();
// 迭代器遍历
while(linkiter.hasNext()){
String next = linkiter.next();
System.out.println(next);
}
// 索引下标遍历
for (int i = 0; i < link.size(); i++) {
String s = link.get(i);
System.out.println(s);
}
// 增强for循环遍历
for (String s : link) {
System.out.println(s);
}
}
}
10.16 LinkedList集合的特有功能
10.17 set集合概述和特点
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class demo08 {
public static void main(String[] args) {
// 不可重复,不按顺序,没有索引遍历
Set<String> strings = new HashSet<String>();
strings.add("张飞1");
strings.add("张飞2");
strings.add("张飞3");
strings.add("张飞4");
strings.add("张飞5");
strings.add("刘备");
strings.add("张飞1");
// 迭代器遍历
Iterator<String> iterator = strings.iterator();
while (iterator.hasNext()){
String next = iterator.next();
System.out.println(next);
}
System.out.println("========================");
// 增强for遍历
for (String string : strings) {
System.out.println(string);
}
}
}
10.18 哈希值
package demo08;
public class TestHash {
public static void main(String[] args) {
System.out.println("你好".hashCode());//652829
System.out.println("中国".hashCode());//642672
}
}
10.18 HashSet集合概述和特点
10.19 HashSet集合保证元素唯一性-源码解析
10.20 常见数据结构之哈希表
10.21 HashSet集合存储学生对象并遍历
需要重写Student类hascode 和equsal方法
package demo08;
import java.util.Objects;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
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;
}
//重写2个方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
主方法
package demo08;
import java.util.HashSet;
public class TestHashSet {
public static void main(String[] args) {
//不可重复,实现 姓名和 年龄相同 就算一个人,需要重新对象类的hashcode 和 equs方法
HashSet<Student> students = new HashSet<>();
Student student1 = new Student("张飞",21);
Student student2 = new Student("刘备",22);
Student student3 = new Student("关羽",23);
// 重复的人员
Student student4 = new Student("关羽",23);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student4);
for (Student student : students) {
System.out.println(student.getName()+student.getAge());
}
}
}
10.21 linkedHaset集合概述和特点
10.22 treeSet集合概述和特点
package demo08;
import java.util.TreeSet;
public class TestTreeSet {
public static void main(String[] args) {
// 注意这里要使用引用类型包装类
// 不可重复切有序
TreeSet<Integer> integers = new TreeSet<>();
integers.add(1);
integers.add(22);
integers.add(15);
integers.add(30);
integers.add(15);
for (Integer integer : integers) {
System.out.println(integer);
}
}
}
10.23 自然排序Comparable的使用
- 主方法 ```java package demo08;
import java.util.TreeSet;
public class TestTreeSet { public static void main(String[] args) {
TreeSet<Student> treeSet = new TreeSet<Student>();
Student zhoujielun = new Student("zhoujielun", 22);
Student wangfei = new Student("wangfei", 32);
Student xiaofeifei = new Student("xiaofeifei", 12);
Student goufucheng = new Student("goufucheng", 52);
treeSet.add(zhoujielun);
treeSet.add(wangfei);
treeSet.add(xiaofeifei);
treeSet.add(goufucheng);
for (Student student : treeSet) {
System.out.println(student.getName()+":"+student.getAge());
}
}
}
- 泛型如果为类,那么这个类必须实现Comparable接口,并且重写compareTo方法
```java
public class Student implements Comparable<Student> {
@Override
public int compareTo(Student o) {
return -1;
}
}
返回值为 -1 > 1 分别代表: -1 :对存储的数据倒着打印 0 :只会存储一个元素 1:对存储的数据正着打印
package demo08;
import java.util.Objects;
// 需要实现Comparable
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
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;
}
//重写2个方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public int compareTo(Student o) {
// this 代表传入的 o代表上一个对像 2个进行对比
/**
* zhoujielun22-------->zhoujielun22
* wangfei32-------->zhoujielun22
* xiaofeifei12-------->zhoujielun22
* goufucheng52-------->zhoujielun22
* goufucheng52-------->wangfei32
* xiaofeifei:12
* zhoujielun:22
* wangfei:32
* goufucheng:52
*/
int num = this.age - o.age; //此处根据年龄排序 规则是 数值越大就第最后一个输出
// int num = this.age - o.age;此处根据年龄倒叙
System.out.println(this.getName()+this.getAge()+"-------->"+o.getName()+o.getAge());
// 年龄相同时按照字母排序 ,否则添加不上
int resutlt = num==0?this.name.compareTo(o.name):num;
System.out.println(resutlt);
return resutlt;
}
}
10.21 比较器Comparable的使用
package demo09;
import java.util.Comparator;
import java.util.HashSet;
import java.util.TreeSet;
public class TestHashset {
public static void main(String[] args) {
//使用匿名内部类 可以省去实现 Comparator接口
TreeSet<Student> treeSet= new TreeSet<Student>(new Comparator<Student>() {
@Override
// 重写 Comparator对比方法
public int compare(Student o1, Student o2) {
int num= o1.getAge()-o2.getAge();
int result = num==0?o1.getName().compareTo(o2.getName()):num;
return result;
}
});
Student zhoujielun = new Student("zhoujielun", 22);
Student wangfei = new Student("wangfei", 32);
Student xiaofeifei = new Student("xiaofeifei", 12);
Student goufucheng = new Student("goufucheng", 52);
Student helen = new Student("helen", 52);
treeSet.add(zhoujielun);
treeSet.add(wangfei);
treeSet.add(xiaofeifei);
treeSet.add(goufucheng);
treeSet.add(helen);
for (Student student : treeSet) {
System.out.println(student.getName()+":"+student.getAge());
}
}
}
十一、泛型
11.1 泛型的概述
11.2 泛型类
package demo09;
import obj.Testconstor;
//泛型类
public class TestGeneric<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
11.3 泛型方法
package demo09;
import obj.Testconstor;
//泛型方法
public class TestGeneric {
public <T> void getN(T t){
System.out.println(t);
}
}
11.4 泛型接口
package demo10;
public interface UserService<T> {
void add(T t);
}
----实现接口
package demo10;
public class UserServiceImpl<T> implements UserService<T>{
@Override
public void add(T t) {
}
}
11.5 类型通配符
十二、Map
12.1 map的概述和使用
package demo12;
import java.util.HashMap;
public class TestHashMap {
public static void main(String[] args) {
// <k,v> k=键类型 v=值类型
HashMap<Integer, String> map = new HashMap<>();
map.put(1,"张飞");
map.put(2,"张san");
map.put(3,"张飞");
System.out.println(map);
}
}
12.2 map的常用方法
12.3 map的值获取
package demo12;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestHashMap {
public static void main(String[] args) {
// <k,v> k=键类型 v=值类型
HashMap<Integer, String> map = new HashMap<>();
map.put(1,"张飞");
map.put(2,"张san");
map.put(3,"张飞");
// 根据键拿到值
// System.out.println(map.get(1));
// 拿到所有的键
// Set<Integer> integers = map.keySet();
// for (Integer integer : integers) {
// System.out.println(integer);
//
// }
// 拿到所有的values
// Collection<String> values = map.values();
// for (String value : values) {
// System.out.println(value);
//
// }
// 获取所有键值对对象的集合
Set<Map.Entry<Integer, String>> entries = map.entrySet();
for (Map.Entry<Integer, String> entry : entries) {
System.out.println(entry);
}
}
}
12.4 map的遍历方式一
// map集合遍历1
// 首先获取所有的key,通过getkey 拿到value
Set<Integer> integers = map.keySet();
for (Integer integer : integers) {
String s = map.get(integer);
System.out.println(integer+","+s);
}
12.4 map的遍历方式二
// map 集合遍历2
Set<Map.Entry<Integer, String>> entries = map.entrySet();
for (Map.Entry<Integer, String> entry : entries) {
Integer key = entry.getKey();
String value = entry.getValue();
System.out.println(key+":"+value);
}
12.5 map的遍历学生对象
package demo12;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestHashMapStu {
public static void main(String[] args) {
//
Student student1 = new Student("张飞",21);
Student student2 = new Student("刘备",22);
Student student3 = new Student("关羽",23);
HashMap<Integer, Student> map = new HashMap<>();
map.put(1,student1);
map.put(2,student2);
map.put(3,student3);
//方式一遍历
Set<Integer> integers = map.keySet();
for (Integer integer : integers) {
Student student = map.get(integer);
System.out.println("key:"+integer+" value:"+student.getName()+":"+student.getAge());
}
System.out.println("============================================");
Set<Map.Entry<Integer, Student>> entries = map.entrySet();
for (Map.Entry<Integer, Student> entry : entries) {
Integer integer = entry.getKey();
Student student = entry.getValue();
System.out.println("key:"+integer+" value:"+student.getName()+":"+student.getAge());
}
}
}