java容器、泛型及一些知识点的回顾

本文是关于Java学习中的重要知识点回顾,包括集合的使用场景和优缺点,泛型的概念及其好处,构造器的特性,Static关键字的作用,以及this关键字的用途。此外,还提到了Object类作为所有Java类的基础,以及创建对象的步骤。
摘要由CSDN通过智能技术生成

  • 记录一些自己在学习中认识不够清晰的知识点,方便自己回顾

一、 集合的知识结构图

  1. 什么时候使用集合?

    当我们需要将一些相同结构的个体整合在一起时,就可以考虑使用集合了 。举例:购物车

  2. 为什么要使用集合?

    集合和数组相似点:
    都可以存储多个对象,对外作为一个整体存在,是“装其他对象的对象”.

    数组:优点:线性序列效率高 缺点:长度需要初始化,且固定不变,不灵活。删除和添加效率低下;缺乏封装,操作繁琐。

    因为数组的这些缺点,因此引入集合

简单概念解释

• Collection 根接口,表示一组对象

• List 有顺序可重复

  ArrayList: 查询效率高,增删效率低,长度不受限实现(扩容)
  Linkedlist: 增删效率高,查询效率低

• Set 没有顺序不可重复

 • HashSet 
 • 采用Hashtable哈希表存储结构(神奇的结构) 
 • 优点:添加速度快 查询速度快 删除速度快 
 • 缺点:无序 

 • LinkedHashSet 
 • 采用哈希表存储结构,同时使用链表维护次序
 • 有序(添加顺序)

 • TreeSet
 • 采用二叉树(红黑树)的存储结构 
 • 优点:有序 查询速度比List快(按照内容查询) 
 • 缺点:查询速度没有HashSet快

• Map 存储一组键值对象,key和value

HashMap:底层数据结构:数组加链表,键不能重复,如果重复则新的覆盖旧的

TreeMap:排序时使用

• Key 唯一 无序
• value 不唯一 无序

二、泛型(转自csdn 作者 我不是大王强)

// 泛型:就是一种不确定的数据类型。

// 比如:ArrayList E就是泛型。 这种不确定的数据类型需要在使用这个类的时候才能够确定出来。

// 泛型可以省略,如果省略,默认泛型是Object类型。

// 泛型的好处:

    1. 省略了强转的代码。
    1. 可以把运行时的问题提前到编译时期。
  public class Demo01Generic {

       public static void main(String[] args) {

      //创建集合不给出泛型
      ArrayList list = new ArrayList();
      list.add("hello");
      list.add("java");
      list.add("world");
      //遍历集合
      for (Object obj : list) System.out.println(obj);
      //进行遍历,打印出每个字符串长度
      for (Object obj : list) {
          String str = (String) obj;/*此处练习了向下转型*/
          System.out.println(str.length());
      }
      //创建集合给出泛型
      ArrayList<String> list2 = new ArrayList<>();
      //添加元素
      list2.add("helloo");
      list2.add("helo");
      list2.add("world");
       //list2.add(100);编译的时候就会报错,如果没有给出泛型,则不会报错
      //使用增强for遍历集合
      for (String str2 : list2
              ) {
          System.out.println(str2);

      }
    }
  }

三、构造器(一种特殊的方法)

// 用于对象的初始化

// 需要注意

  • 构造器的方法名必须和类名一致!
  • 构造器虽然有返回值,但是不能定义返回类型(返回值的类型肯定是本类),不能在构造器里调用 return。
  • 通过new关键字调用!!
  • 如果我们没有定义构造器,则系统会自动定义一个无参的构造方法。如果已定义则编译器不会 添加无参数构造方法!
  • 与普通方法一样,构造方法也可以重载
class Point{
	double x,y;
	
	//构造方法名称必须和类名保持一致
	public Point(double _x,double _y) {
		x=_x;
		y=_y;
	}
	
	public double getDistance(Point p) {
		return Math.sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
	}
}


public class Constructor {
	public static void main(String[] args) {
		Point p=new Point(3.0,4.0);  //new关键字调用
		Point origin=new Point(0.0,0.0);
		
		System.out.println(p.getDistance(origin));
		
	}

}

四、Static关键字

  • 修饰成员变量和方法,从属于类

  • 普通变量和方法从属于对象

  • 静态方法不能使用非静态方法

  • 非静态方法可以使用静态

 public class TestStatic
  { 
  int a; 

  static int width;   //修饰成员变量,从属于类

  static void gg(){   //修饰方法
     
     //tt();  //报错静态方法不能使用非静态方法

    System.out.println("gg");
   }
   
   void tt(){     //从属于对象
       gg(); // 可以使用静态方法
       System.out.println("tt");
     }

   public static void main(String[] args){

          TestStatic hi = new TestStatic(); 

          TestStatic.width = 2;

           //  TestStatic.gg(); //gg(); 

           //   hi.gg(); //通过引用也可以访问static变量或static方法。不过,一般还 是使用类名.static成员名来访问。 
           //  gg();

           hi.tt();  //用对象引用,因为从属于对象
      } 
    }

五、this关键字

  • 本质:创建好对象的地址

this的作用:

• this表示的是当前对象本身, 
• 更准确地说,this代表当前对象的一个引用。

普通方法中使用this

• 区分类成员属性和方法的形参. 
• 调用当前对象的其他方法(可以省略) 
• 位置:任意 

构造方法中使用this

• 使用this来调用其它构造方法 
• 位置:必须是第一条语句
• this不能用于static方法。(底层在堆里的对象中,而静态方法在方法区)
public class TeatThis {
	
	int a,b,c;
	
	TeatThis(int a,int b){
		this.a=a;  //区分类成员属性和方法的形参
		this.b=b;
	}
	
	TeatThis(int a,int b,int c){
		this(a,b);  //调用其它构造方法 ,必须是第一条语句
		this.c=c;
	}
	

	void sing() {
		
	}
	
	void eat() {
		this.sing();//调用本类中的sing()即调用当前对象的其他方法
		System.out.println("你妈妈喊你回家吃饭");
	}
	
	public static void main(String[] args) { 
		TeatThis hi= new TeatThis(2,3);
		hi.eat();
		
	}

}

再次强调

• This代表当前对象自身的引用(必须new) 
• This可以修饰属性,区别成员变量和局部变量 
• This修饰方法 
• This修饰构造方法(必须是第一条语句)

六、知识点的小问题记录

  • Object类是所有Java类的根基类

  • 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类

     public class Person { ... } 
     public class Person extends Object { ... }
    
  • B b = new B(); // 则既声明了类型为B的引用,又创建了B的实例(对象),并且将b引用了B的实例(对象)。

  • 创建对象的步骤

    • 分配对象空间,并将对象的成员变量初始化为0或空
    • 执行属性值的显式初始化
    • 执行构造方法
    • 返回对象的地址给相关变量
    

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值