Map集合

Map集合 一、扩展TreeSet应用 比较器排序 昨天验证TreeSet原理时,使用了自然排序法;今天再将比较器法说明 //TreeSet存储自定义对象,使用比较器法进行排序和确定唯一性 class Student{ String name; int age; public Student(String name,int age) { this.name = name; this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } } public class Test1 { public static void main(String[] args) { Set<Student> set = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { //规则:先按姓名的降序排列;姓名相同,则按年龄升序排列 if(o1.name.equals(o2.name)) { //姓名相同,则按年龄升序 return o1....

Aug 8, 2023 · 4 min · 橘子树谅

Set集合

Set集合 一、List实现类补充 Vector 描述:和ArrayList类似,都是通过数组扩容进行数据存储;区别在于Vector加了锁; 与ArrayList的区别: Vector: 安全,性能低;在多线程中数据不会混乱;只是被ArrayList所取代(后面学习线程安全ArrayList) ArrayList:不安全,性能高;倾向于用在单线程中 //和ArrayList的操作是类似的(扩展) List list = new Vector(); list.add(1); list.add(3); list.add(2); for (Object object : list) { System.out.println(object); } //Vector除了上述功能外,自身也提供了存储和遍历的方法 Vector vector = new Vector(); vector.addElement(5); vector.addElement(2); vector.addElement(8); Enumeration enumer = vector.elements(); //枚举器遍历 System.out.println("==============="); while(enumer.hasMoreElements()) { //和迭代器类似 System.out.println(enumer.nextElement()); } 二、泛型 后续经常要使用泛型集合,在泛型集合中直接进行泛型应用;泛型设计则是先设计,再进行使用 泛型集合 概述:用于约束集合中存储的类型是同一种类型 //案例: 通过集合存储自定义对象,来引出泛型 //需求:存了自定自定义对象后,循环遍历,取出属性---问题:假设存一个非Student类型? //处理方案:使用泛型约束存储类型 //使用泛型的好处:不用强转,更安全;约束了类型,更规范;使程序更健壮 class Student{ String name; public Student(String name) { this.name = name; } } public class Test1 { public static void main(String[] args) { List<Student> list = new ArrayList<>(); list....

Aug 7, 2023 · 3 min · 橘子树谅

List集合

List集合 一、Collection集合 昨天讲解了常用方法,今天继续扩充用法 循环遍历 //Colletion循环遍历: Collection col = new ArrayList(); col.add(1); col.add(3); col.add(2); //1.基本for--操作下标,不可以;无下标 for(int i=0;i<col.size();i++) {} //2.增强for foreach for (Object obj : col) { //本质是迭代器-查反编译工具 System.out.println(obj); } System.out.println("========"); //3.迭代器 Iterator it = col.iterator(); while(it.hasNext()) { //判断是否有下一个元素 System.out.println(it.next()); //有则取出,并移位 } 扩展 Collection存自定义对象,扩展remove,contains方法的应用 class Person{ String name; public Person(String name) { this.name = name; } @Override public String toString() { return "Person [name=" + name + "]"; } @Override public boolean equals(Object obj) { if(this....

Aug 6, 2023 · 2 min · 橘子树谅

常用类

常用类 一、字符串类 不可变字符串 String类:是一个不可变字符串类,调用任意方法不会改变原对象的值 创建方式:1.直接赋值字符串 2.new对象 //String的创建: //1.直接赋值字符串 String a = "zs"; //存到常量池相同字符串常量只有一份 String b = "zs"; System.out.println(a==b); //true //2.new对象方式 String aa = new String("zs"); String bb = new String("zs"); System.out.println(aa==bb); //false 每次new的地址不同 System.out.println(a==aa); //false 堆地址 vs 常量池地址 System.out.println(aa.equals(bb)); //true equals比较内容 //问题:String aa = new String("zs");创建了几个对象? //如果程序中有“zs”,则创建一次(new 对象) //如果程序中没有“zs”,则创建两次(new 对象,“zs”) String的常用方法 //String字符串的常用方法: 调用方法不会改变原对象的值 String a = "hello"; String b = a.concat("world"); //字符串拼接,将两个字符串拼接到一起 等价+ System.out.println(b); //helloworld System.out.println(a.charAt(1)); //根据下标获取对应字符 下标从0开始 System.out.println(a.contains("el")); //判断是否包含字串 char[] cs = a....

Aug 5, 2023 · 3 min · 橘子树谅

Object类

Object类 一、匿名内部类 匿名内部类在设计上和局部内部类相似;但是本质为多态,也就是能用多态的案例,肯定能用匿名内部类 回顾多态案例(接口或抽象类都可以),有直接引用,传参多态,返回值多态 直接引用 //案例:喷火娃具有喷火的能力 //应用场景: //当实例化一次对象,倾向于用匿名内部类;写法上简单,节约资源 //当实例化多次对象,倾向于用多态;结果清晰,无需创建多个class资源 interface Fireable{ void fire(); } class WaWa implements Fireable{ @Override public void fire() { System.out.println("喷火娃正在喷火..."); } } public class Test1 { public static void main(String[] args) { //1.接口直接引用的多态 Fireable able = new WaWa(); able.fire(); //2.匿名内部类的方式 Fireable able2 = new Fireable() { @Override public void fire() { System.out.println("匿名内部类的喷火.."); } }; able2.fire(); } } 传参多态 //案例:直接调方法,多态传参;接口为USB标准;实现类为Disk interface USB{ void run(); } class Disk implements USB{ @Override public void run() { System....

Aug 4, 2023 · 4 min · 橘子树谅

接口与内部类

接口与内部类 一、接口概述 概述与特点 概述:是一个特殊的抽象类;只是接口没有继承关系 接口的主要作用是在实现多态上 接口中的方法都是抽象方法(除非有特殊设定),更形象的去使用多态 语法设计: 接口与实现类的关系 interface 接口名{ ​ 抽象方法; } class 实现类 implements 接口{ ​ 重写抽象方法; } 与抽象类的异同 相同点: 都可以生成class文件 都不能具体化(不能实例化对象) 都可以调用Object的所有方法(继承性-Object是老祖宗) 都可以作为引用类型(多态应用) 不同点: 接口中定义的属性是公开的静态常量 默认加:public static final 接口中定义的方法为公开的抽象方法 默认加:public abstract 接口中不能有构造方法,没有静态代码块和动态代码块二 二、应用场景 接口与抽象类类似,就是为多态而生;在应用场景上也是一样的 直接多态 当我们的案例中,表示一种特殊的能力或功能时,则可使用直接引用多态 案例:喷火哇具有喷火的能力 分析:类-娃娃类 接口-可喷火接口 方法-喷火 //案例:喷火娃具有喷火的能力 interface Fireable{ //喷火能力-接口 int age=20; //默认+public static final 使用反编译工具查看 //能力的具体体现 void fire(); //默认+public abstract default void test() { //不能有成员方法 --可以加default } } //处理异常:1.把自身变抽象 2.重写抽象方法 /*abstract*/ class WaWa implements Fireable{ //实现类 @Override public void fire() { System....

Aug 3, 2023 · 4 min · 橘子树谅