2019-9-8 Java集合框架

复习
一、继承:
Object 是所有类的一个祖先类
即:class A —> class A extends Object{}

二、final 关键字:可以修饰类 / 修饰方法 / 修饰变量

三、abstract 关键字:可以修饰类 / 修饰方法

四、接口(interface)
1、接口的定义语法`

interface 接口名称 [extends 其他接口]  { //接口可以多继承
	抽象方法列表
	void method();        //自动给方法加修饰public abstract
	int a = 10;     //自动给变量加public static final
	//了解
	static void staticMethod(){  //静态方法
	}
	default void method(){        //接口中的默认方法
	}
}

2、类实现接口的语法:
class 类名 [implements 接口] { //同时实现多个接口
覆写接口中的所有抽象方法 or 把自己声明成抽象类,实现部分方法
}
3、接口看出契约 / 合同

五、多态
1、引用:指向对象的线索
2、向上转型(把引用类型转换成另一个引用类型(或类型层级属于其上层的))
3、引用有引用自己的类型:
(1)接口类型的引用:List a;
指向实现接口的类类型的对象
(2)类类型的引用:ArrayList a;
指向本类或者本类的子类的类类型的对象
(3)数组类型的引用:int[] a;
Object[] a = new String[10];
4、表现:
(1)定义时:
List a = new ArrayList();
(2)用在返回中:
List method (){
return new ArrayList();
}
(3)用在形式参数中:
void method (List list){}
method (new ArrayList() );

六、方法使用和执行
1、编译期间,由引用类型决定可以调用哪些调用;
2、运行期间,由实际的对象类型决定执行的是哪个方法;
3、了解:运行期间的静态方法,随引用类型

非重要:
List a = new ArrayList(); //有一天,需要调用只有ArrayList 支持的方法
ArrayList b = (ArrayList)a; //需要保证a指向的对象,可以被ArrayList 引用指向,即是ArrayList的子类类型的对象
//如果不满足,会有运行异常

为了安全,有instanceof可以做运行时的检查

=======================================
一、数据结构:
线性表 List
栈和队列 Queue / Stack / Deque
二叉树
堆 PriorityQueue
排序 Arrays.sort | List.sort
搜索 Set / Map
搜索树
哈希表
在这里插入图片描述
Map 是映射关系:
例如同学的道勤次数
姓名 (Key)映射 上课次数(Value)
其中,Key 不允许重复,Value允许重复

1、Collection 接口的常用方法说明:
在这里插入图片描述
方法的举例使用:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;

public class CollectionDemo {
    public static void main(String[] args) {
        Collection<String> list=new ArrayList<>();
        System.out.println(list);
        System.out.println(list.size());
        System.out.println(list.isEmpty());
        System.out.println("+++++++++++++++++++++++++++++++");

        System.out.println(list.add("B"));
        System.out.println(list.add("T"));
        System.out.println(list.add("S"));
        System.out.println(list);
        System.out.println(list.size());
        System.out.println(list.isEmpty());
        Object[] array=list.toArray();
        System.out.println(Arrays.toString(array));
        for(String s:list){
            System.out.println(s);
        }
        System.out.println("+++++++++++++++++++++++++++++");

        list.remove("S");
        System.out.println(list);
        System.out.println(list.size());
        System.out.println(list.isEmpty());
        System.out.println("+++++++++++++++++++++++++++++");

        list.clear();
        System.out.println(list);
        System.out.println(list.size());
        System.out.println(list.isEmpty());
        System.out.println("+++++++++++++++++++++++++++++");
    }
}

2、Map 常用方法说明:
在这里插入图片描述代码举例说明:

import java.util.HashMap;
import java.util.Map;

public class MapDemo {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        System.out.println(map);
        System.out.println(map.size());
        System.out.println(map.isEmpty());
        System.out.println("====================================");

        System.out.println(map.get("组合名称"));
        System.out.println(map.getOrDefault("组合名称","某国际知名组合"));
        System.out.println(map.containsKey("组合名称"));
        System.out.println(map.containsValue("某国际知名组合"));
        System.out.println(map);
        System.out.println(map.size());
        System.out.println(map.isEmpty());
        System.out.println("++++++++++++++++++++++++++++++++++++++++++");

        map.put("组合名称","BTS");
        map.put("粉丝名称","ARMY");
        map.put("关系","防永阿永");
        System.out.println(map.get("组合名称"));
        System.out.println(map.getOrDefault("组合名称","某国际知名组合"));
        System.out.println(map.containsKey("组合名称"));
        System.out.println(map.containsValue("某国际知名组合"));
        System.out.println(map.containsValue("BTS"));
        System.out.println(map);
        System.out.println(map.size());
        System.out.println(map.isEmpty());
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");

        for(Map.Entry<String,String> e:map.entrySet()){
            System.out.println(e);
            System.out.println(e.getKey()+" = "+e.getValue());
        }

    }
}

二、静态内部类:
定义在类的成员级别(member-level),同时被static修饰的一种类

class LinkedList{
	public/default/protected/private static class Node{
		int val ;
		Node next ;
	}
}

最大的作用就是一个类从概念上应该属于另一个的范围;
使用上:
1、在 LinkedList 内部使用:和普通类没有区别
Node n = new Node();
2、在 LinkedList 外部使用:指明所属关系
LinkedList.node n = new LinkedList.node();

三、泛型:
1、泛型的引入:
2、泛型:
(1)泛型类:重点学会使用
(2)泛型方法:

class MyArrayList<E>{
	private E[] array;
	private int size;
}
MyArrayList<String>//概念上可以认为是定义了 String[] array ;
                                 //但实际不是
 class MyMap<K,V>{
 }   

MyArrayList<Person> list = new MyArrayList<Person>();
MyArrayList<Person> list = new MyArrayList<>();//这两个定义实际上是一样的,,类能自己推导出来,类型推导        


list.add(new Person());
list.add(new Book());//编译错误

Person p=list.get(0);//不再是向下转型,不需要类型转换
Book b=list.get(0);//编译错误
                     

重点!!!!
!!!
泛型作用在编译期间

MyArrayList<String>和MyArrayList<Person>和MyArrayList<Book>运行期间都是同一个类型MyArrayList,这个过程叫做类型擦除

类型擦除!!!!
本质上E被擦除成Object 类型了
泛型总结:
在这里插入图片描述

四、包装类:
之前说的泛型是针对引用类型,而基本数据类型则是通过包装类来实现
| 基本数据类型 | 包装类 | | byte | Byte | | short | Short | | int | Integer | | long | Long | | flfloat | Float | |
double | Double | | char | Character | | boolean | Boolean |

例如:
// 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中
Integer ii = Integer.valueOf(i);
Integer ij = new Integer(i);

// 拆箱操作,将 Integer 对象中的值取出,放到一个基本数据类型中
int j = ii.intValue();

1、装箱过程会生成Integer 的对象
2、i 的值的改变,不影响ii 指向对象的内部的值

五、list 的使用
常见的方法:
在这里插入图片描述

发布了78 篇原创文章 · 获赞 4 · 访问量 4174

猜你喜欢

转载自blog.csdn.net/weixin_43580746/article/details/100636664