JAVA小白的学习总结第四周

1.一些常用类的列举

    1.1常用类之String

               一些基本概念:String 类代表字符串;字符串是常量;它们的值在创建之后不能更改(常量的地址值)

                       String类是一个特殊的引用类型 :
                             String类型如果作为参数传递,形式参的改变不会影响实际参数(跟基本类型作为参数的效果一样)

        1.1.1 关于String类的一些面试题


               1.数组中有没有length()方法,String类型有没有length()方法,集合中有没有length()?
                           数组中:length属性
                           String类型中有length方法():获取字符串长度
                           集合中:没有length()方法, 有size()方法;

               2.以下s1和s2实际含义
                             String s1 = "hello" ;     //常量赋值
                              String s2 = new String("hello") ;//堆内存中申请空间
 
                    前者:创建的是一个对象   
                             将常量赋值的形式:直接在方法区中的常量池中 先查看是否存在常量"hello",如果存  "hello",

                        将地址值赋值给它,如果不存在,在常量池中开辟空间!
                    后者:创建两个对象
                         new XXX ():堆内存
                          "hello":常量池中
                    s1和s2 :都是表示"hello"字符串

       1.1.2 String类的构造方法

        public String()	 //无参构造方法:创建一个字符串对象				
		
        
        public String(byte[] bytes) //使用平台的默认编码集 :将字节数组---->构造出String类型
  		
        public String(byte[] bytes, int offset, int length)://将字节数组的一部分转换成字符串
  				/*
                参数1:传递的实际字节数组对象
  				参数2:从哪个位置开始
  				参数3:指定长度
                */
  		public String(char[] value)//:将字符数组---构造成一个字符串对象
  
  		public String(char[] value,int offset,int count) //:将字符数组一部分转换成字符串
  				/*
                参数1:传递的实际字符数组对象
  				参数2:从哪个位置开始
  				参数3:指定长度
                  */
  		public String(String original)//:将一个字符串值存储进来,创建一个字符串对象

 

        1.1.3 String类型的判断功能

        
    public boolean equals(Object anObject) //:比较两个字符串内容是否相同
  		
    public boolean equalsIgnoreCase(String anotherString) //:不区分大小写比较
  		
    public boolean startsWith(String prefix) //:判断是否以指定的子串开头
 		
    public boolean endsWith(String suffix) //:判断是否以指定的子串结尾
 		
    public boolean isEmpty() //:判断字符串是否为空

        1.1.4 String类的获取功能以及分割功能

//String类的获取功能

    int length() //:获取字符串长度
  
	public char charAt(int index) //:获取指定索引处的字符
  
	public String concat(String str) //:字符串拼接功能:使用当前字符串和指定str字符串进行拼接
  
	public int indexOf(int ch) //:获取指定字符在此字符串中第一次出现索引值
  
	public int indexOf(String str) //:获取指定字符串在此字符串中第一次出现索引值
  
  
 // String类的分割功能

  		public String[] split(String regex) //:通过指定的字符串进行分割,返回值字符串数组

        1.1.5 String类转换功能


        public char[] toCharArray() //:将字符串转换成字符数组

  		public byte[] getBytes() // :将字符串----变成字节数组 (过程:编码)

  		public static String valueOf(XXX xx) //:可以将任何类型的数据转换成String
  				/*
                    举例:
  						int i = 100 ;---->int  --- String
  					String.valueOf(i) ;---->"100"
                */
  		public String toUpperCase() //:将此字符串转换成大写

  		public String toLowerCase() //:将此字符串转换成小写

 

        1.1.6 String类的截取功能以及替换功能

//String类的截取功能

  	    public String substring(int beginIndex) //:从指定位置开始截取,默认截取到末尾
  
  	    public String substring(int beginIndex,int endIndex)
 	    //从指定位置开始截取,到指定位置结束,但是包含beginIndex,不包含endIndex索引(包前不包后)

//String类的替换功能
     
    public String replace(char oldChar,char newChar) //:将以前的字符用心的字符替换掉
     
    public String replace(String oldStr,char newStr) //:将以前的字符用心的字符替换掉

//去除两端空格
  
    public String trim()

 1.2常用类 StringBuffer

                 线程安全的可变字符序列 ,提供字符串缓冲区

//StringBuffer类的获取功能
 
 		int length() //:获取长度(缓冲区中字符数)
 
 		public int capacity() //:获取缓冲区的容量大小
 
//StringBuffer的构造方法:
 
 		public StringBuffer()
            //空参构造,初始容量为 16 个字符。(默认的容量足够,不需要指定容量大小)
 
		public StringBuffer(String str)
            //构造一个缓冲区,指定字符串内容到缓冲区中,容量大小等于16个+当前字符串的实际长度
 
		public StringBuffer(int capacity)
            //指定容量大小,构造一个缓冲区	

//StringBuffer的添加功能:
 
	public StringBuffer append(任何类型数据...) 
            //将任何类型的数据追加到缓冲区中(追加末尾)
 
	public StringBuffer insert(int offset,String str/任何类型数据)
            //将某个元素插入到指定位置

 
 	public StringBuffer delete(int start,int end)
            //删除从指定位置到指定位置结束(包前不包后,end-1位置)

//StringBuffer类反转功能
 
 		//键盘录入一个数据,将字符串进行反转---(内容还是字符串内容)
 
	 public StringBuffer reverse() //:将缓冲区中的字符进行反转!

//StringBuffer的截取功能
 
	 public String substring(int start) //:从指定位置开始截取,默认截取到末尾
 
 	 public String substring(int start, int end) //:从指定位置开始截取,截取到指定位置结束!
  		
 
// StringBuffer的替换功能
 
     public StringBuffer replace(int start,int end, String str)
 
		//从指定位置开始到指定位置结束(end-1处)使用str子串进行替换

    1.2.1  关于StringBuffer的面试题

 

面试题:
  1.StringBuffer和数组的区别?
  
  	共同点:他们两者都属于引用类型,而且都是"容器"
 	
    区别:    StringBuffer: 可变的字符序列 (长度可变的)
  			里面可以存储任何数据类型----->都是以"字符"进行拼接 通过append追加
  			        有length()方法
  			
  	        数组: 长度固定,只能存储同一种类型的元素!
  			        有length属性
  		        int[] arr = {100,200,300,"hello"} ; //错误的!
  
  
 2.StringBuffer和StringBuilder的区别?
  		
  	  共同点:两者之间互相兼容的,功能是相同(添加,构造方法,替换,删除,截取..)
  
      区别:  StringBuffer:可变的字符序列
  				     线程角度:线程安全的--->同步的---->执行效率低!
              StringBuilder:可变的字符序列
  				     线程角度:线程不安全的---->不同步的---->执行效率高
  			    在单线程程序中,StringBuilder去替换StringBuffer,因为效率高!
  
  
 3.StringBuffer和String类型作为形式参数有什么区别:
  	  共同点:两个都是引用类型
      区别:
          String类作为形式参数,它的效果基本数据类型一样(String是最特殊的引用类型)
  	      String是一个常量,一旦被赋值,其值不能被改变 
          StringBuffer/StringBuilder,他们作为形式参数,形式参数的改变会直接影响实际参数(和其他引用类型效果一样)

1.3 常用类 Date类

                 java.util.Date类

          1.3.1  Date类中的方法

//构造方法:
	public Date() // 无参构造
  
//成员方法:
  		public long getTime()  // 返回1970 年 1 月 1 日所表示的时间毫秒	

          1.3.2 如何将 String 的文本格式和 Date的日期格式相互转化

String文本格式  和Date日期格式相互转换
  	
      Date---------------->String 日期文本格式  "格式化"操作
 
  	  java.text.DateFormat:可以将日期和文本相互转换
  
      DateFormat继承自Format类:都是抽象类,不能直接实例化!,提供更具体的子类
  		    java.text.SimpleDateFormat extends DateFormat
    
      它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)

SimpleDateFormat的构造方法
  
  	public SimpleDateFormat(String pattern):
   
     创建一个SimpleDateFormat对象
    	参数:指定一个模式 要遵循一定的规则(jdk对它规定了)
        
    	    y年	------2020		"yyyy"
    	    M年中月份----10/03   "MM"
  		    d月中的天数----05/21  'dd'
  		    h:表示上午/下午的小时数  hh
  		    H:一天中的小时数		  HH
  		    m:分钟数				  mm
  		    s:秒数				  ss
  
    模式
        "yyyy-MM-dd HH:mm:ss" 
  	    "yyyy年MM月dd日 HH时mm分ss秒" 
      
        Date---->String
        格式化的步骤:
          1)存在Date对象
          2)创建SimpleDateFormat(String pattern)
          3)public final String format(Date date):格式化方法
   
   解析
   String----->Date 
   解析步骤:
   	    1)存在String  "日期文本"   "2020-10-21"
  		2)创建SimpleDateFormat(String pattern)
  		3)public Date parse(String source)  throws ParseException

  解析中注意的事项:
  		SimpleDateFormat中的参数模式:必须和String 日期文本格式一致,否则出现解析异常(ParseException)

   1.4 常用类 Calendar类:日历类

    Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法
  
   注:Calendar不能直接实例化!	
 
  		如果某一个类如果不能直接实例化:
  		    首先里面会存在一些静态功能,静态功能的返回值就是该类本身!
  			public static Calendar getInstance()
  
    获取的日历字段的值
  	        public int get(int field) 
  		          参数:传递日历字段

Calendar的成员方法:
  	
    给日历字段添加或者减去时间偏移量

         public abstract void add(int field,int amount)
     		日历对象.add(Calendar.DATE,-5):当前日历时间的5天前
       
    获取当前时间的方法:
        int year = c.get(Calendar.YEAR) ;
		int month = c.get(Calendar.MONTH) ;
		int date = c.get(Calendar.DATE) ;
		System.out.println(year+"-"+(month+1)+"-"+date);
            注:获取月份的值是1~11,故在获取月份值的时候要+1才能获取正确的月份值;
        
    设置当前年月日,日历时间

         public final void set(int year,int month, int date)
      

   1.5  System 类

             System 类包含一些有用的类字段和方法。它不能被实例化。


  字段:
 		  public static final InputStream in  :标准的"输入流"
		  public static final PrintStream out :标准的"输出流"
  
 键盘录入:	
  			Scanner(InputStream in) ---->Scanner(System.in)
  
 输出语句:
  		System.out.println("xxx")----->System.out--->PrintStream ps (字节打印流)
  						ps.println("x") : 字节打印流调用方法名println(String str)
 
 成员方法:
 		public static void gc() 运行垃圾回收器(手动开启)
  			实际开发中,开发者不需要开启
  			运行垃圾回收器,它会调用Obejct类finalize(),回收没有更多引用的对象
 
  
  		public static void exit(int status):参数状态为0:
                System.exit(0); //表示正常终止jvm

		public static long currentTimeMillis():获取当前系统时间的毫秒值


从原数组中的指定位置开始进行复制指定length长度复制到目标数组中的某个位置

        public static void arraycopy(Object src, int srcPos, Object dest, 
                                                         int destPos, int length)
  		    参数1:指定源数组
  		    参数2:源数组中的某个位置
  		    参数3:目标数组对象
  		    参数4:目标数组对象中的某个位置
  		    参数5:指定几个元素复制(长度)

   1.6 其他一些常用类 Random ,BigDecimal 

java.util.Random:随机数生成器
  
  构造方法
 	    public Random() :(推荐),产生的随机数是变化的
  	    public Random(long seed):每次产生的随机数 是固定的!
  
  成员方法:
  		public int nextInt():获取的是int范围内的随机数
  		public int nextInt(int n):获取0到n之间的随机数[0,n)
  
  
  获取随机数两种方式:
  		Math类的random()方法: 返回值double类型
  		Random类空参构造+nextInt(int n):获取随机数



java.math.BigDecimal
  		描述:对浮点类型的数据进行精确计算的!
  构造方法:
  	    public BigDecimal(String val) :字符串"数字字符串"  
  				"1.0"
  				"0.01.."
  
  成员方法:
 		public BigDecimal add(BigDecimal augend)  :求和
		public BigDecimal subtract(BigDecimal subtrahend) :减法
  		public BigDecimal multiply(BigDecimal multiplicand) :乘法
 		public BigDecimal divide(BigDecimal divisor) :除法

2. 集合

   2.1集合概念的面试题

集合和数组的区别?
  
 共同点:集合和数组都是"容器",存储元素!
 
 区别:     

     1)长度的区别
  		    数组的长度:固定的!
  		    集合的长度:可变的!
  
     2)存储数据类型的区别
 		    数组:可以存储基本数据类型,也可以存储引用数据类型
 				int[]	String[]  Student[]
 		    集合:只能存储引用数据类型 --->jdk5以后新特性: 泛型<>
     3)存储元素的区别
  		    数组:只能存储同一种类型的元素
  				    举例: 水杯中"纯净水"
  
 		    集合:可以存储任意类型的元素(类型:引用类型)
  				    举例:
  						白酒兑雪碧
  

   2.2 集合的介绍以及方法

Collection:某些集合可以存储从重复元素,某些集合不能重复元素!
  				有些集合有序,有些集合无序(有序/无序:存储元素和取出元素是否一致!)
  		
 JDK 不提供此接口的任何直接 实现:
  				它提供更具体的子接口(如 Set 和 List)实现
  
  java.util 
  					Collection接口(单例集合的根接口)
  
  		List接口							   Set接口
   
    实现类								          实现类
    ArrayList LinkedList Vector                      HashSet  TreeSet
  
  单例集合中:
  	学习Collection集合
  
  基本功能:
  		添加功能:
  		    boolean add(Object e) :将任何数据类型添加到集合中
  		
        删除功能:
  		    void clear():暴力删除
  		    boolean remove(Object o):移出指定的元素
  		
        判断功能
  		    boolean contains(Object o):判断是否包含指定的元素
  		    boolean isEmpty():判断集合是否为空,如果为空,则返回 true;
  
 
        Collection高级功能
            boolean addAll(Collection c):添加所有

            boolean containsAll(Collection c):包含所有(包含一个算包含还是包含所有?)
                //包含所有元素才算包含,返回true

            boolean removeAll(Collection c):删除所有 (删除一个还是删除所有算是删除?)
                //只要集合中有一个元素被包含,将这个元素从c1删除掉,则返回true!

            boolean retainAll(Collection c):一个集合对另一个集合取交集 
  				//A集合对B集合取交集,将交集的元素保存到A集合,boolean表达的是A集合是否发生变化,如果A集合没有变化的,返回结果false;如果A集合有变化,则返回true!
  
  
  		转换功能:
  			Object[] toArray():将集合转换成对象数组
  			Iterator iterator():Collection集合的迭代器(集合的遍历方式)

Collection集合的高级功能:
 		    Object[] toArray()
  		    Iterator iterator():Collection集合的专有遍历方式
            iterator()的返回值是接口:需要返回的是该接口的子实现类对象!
 	
 		        Iterator:存在一个方法
			    Object next()  //获取下一个元素
 		
 			    boolean hasNext()  //  判断当前迭代器中是否有下一个可以遍历元素,如果存在,则返回true;


   2.3 泛型的介绍

 

什么是泛型
 		格式
  			<数据类型:引用数据类型>
  
 //定义一个字符串数组
 //回想数组的定义格式
		String[] strArray  = {"hello","world","javaee","go",100} ;

	    上面格式直接报错,数组在定义时候就已经将类型限定了
	
	
    集合为了迎合数组的特点,在创建数组的时候,将类型定义了,来保证集合中的元素类型一致的!
		
	
泛型的特点:
		将集合的类型在创建的时候创建的时候就明确,保证集合操作的安全性!
		
         好处:
				1)避免了强制类型转换
				2)将运行时期异常提前到了编译时期
				3)解决了黄色警告线问题
				4)提高了程序的安全性!

泛型定义位置

       泛型在集合中使用居多,可以定义类上,可以放在方法上,也可以放在接口上!

       没有加入泛型之前,程序存在安全隐患,出现类型不匹配:ClassCastException:属于运行时期异常!



泛型的高级通配符
      <?> 当前Object类型/任意Java类型(自定义/jdk提供...)
      <? extends E>:向下限定:E类型以及它的子类  
      <? super E>:向上限定:E类型以及它的父类

        注:向上限定和向下限定最起码为这个类的本身;
            比如 :Collection<? extends Animal> c5  = new ArrayList<Object>();程序会报错,因为动物类向下限定应该是具体的动物,而Object类是所有类的父类,比动物类范围还大,所以会报错.向上限定也是这个道理;
                

   2.4 List集合

List集合  extends Collection

  		List为有序的集合,可以允许元素重复!
  
  有序性:存储和取出一致

  两种方式:
  		1)Object[] toArray()
  		2)Collection集合的Iterator


List集合的特有功能:

  	    添加功能
  		    void add(int index,Object element):在指定位置处添加一个新的元素
  	    删除功能		
            Object remove(int index):删除角标对应的元素
       获取功能
   		    Object get(int index) :获取指定位置处的元素
   		    int size():获取集合的元素数 
   
   	        Object set(int index,Object element):在指定位置处使用当前元素element元素替换

  		
ListIterator<E> listIterator():List集合的专有遍历方式 :列表迭代器

        ListIterator<E> listIterator():List集合的专有遍历方式 :列表迭代器
  
  	    ListIterator:列表迭代器
  
  	    ListIterator<E> listIterator()这个方法底层实现:是通过ArrayList里面的成员内部类
				 ListItr extends Itr :实现的
  				
  	   正向遍历		
          boolean hasNext():判断是否有下一个元素
          Object next()   :获取下一个元素
  
      逆向遍历
          boolean hasPrevious():判断是否有上一个元素
          Object previous():获取前一个元素


List集合的遍历方式:
  
 		1)Collection集合的方法 Object[] toArray;
  		2)Collection集合的迭代器Iterator iterator() ;
  		3)size()+Object get(int index):普通for循环;
  		4)列表迭代器:ListIteraotr listiterator();
        5)增强for循环遍历;

    2.5 增强for循环

增强for的格式:

  		    for(数据类型 变量名 : 数组对象/集合对象(使用最多)){
  			    输出变量名即可
  		    }
  
       作用:是替代迭代器使用,简化遍历集合的书写格式!
  
      注意事项:
  		    1)增强for主要用在集合中,数组一般使用的时候普通for
  		    2)前提条件:
  		    	要使用增强for循环的话,必须保证该集合不能为null,否则就会出现空指针
 					NullPointerException 
  
  		    解决方案:
  				    针对该对象非空判断即可!
  

   2.6  Vector集合

Vector集合:
  		底层数组结构:查询快,增删慢
  		线程安全的---->同步的---->执行效率低!
  
            public boolean add(Object e):传统添加元素的方法
  特有功能:
  		    public void add(int index, E element):插入元素

  		    public Enumeration<Object> elements()		
                                    --- 相当于:Iterator iterator()该接口有两个方法
  			
            boolean hasMoreElements():
                        判断是否有下一个元素-----> 相当于:boolean hasNext()
  			
            Object nextElement():
                        获取一个元素  -----> 相当于:next()
  				
  		    public Object elementAt(int index)
                        通过角标获取指定的元素---->相当于:Object get(int index)
  		    elementAt()+size() :vector的普通for遍历方式
  
      Enumeration和Iterator功能是重复的

   2.7 LinkedList集合

LinkedList集合的特点:
  		底层数据结构是链接列表,查询慢,增删快
  		线程不安全的---不同的---->执行效率高!
  
  应用场景:
  		网站中	记录用户浏览过商品足迹  (Web技术:Cookie/Session)
  
  特有功能
  	    添加
  		    public void addFirst(Object e):将该元素添加到列表的开头!

  		    public void addLast(Object e):将该元素添加到列表的末尾!
  		
      删除
  		    public Object removeFirst():删除列表第一个
  		    public Object removeLast():删除列表最后一个
      获取		
  		    public Object getFirst():获取第一个
  		    public Object getLast() :获取第二个
            public Object pop():此列表所表示的堆栈处弹出一个元素
            public void push(Object e):将元素推入此列表所表示的堆栈的第一个位置

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值