zoukankan      html  css  js  c++  java
  • Java语言进阶篇基本概念

    一、Object类、常用API

    1、Object类

     此类事Java语言中的根类,即所有类的父类。如果一个类没有指定父类,那么默认则继承自Object类。

    2、日期时间类

    (1)Date类(特定的瞬间)、format类(日期/时间格式化子类的抽象类)

    //创建日期对象
    Date date = new Date();
        	 
    //创建日期格式化对象,指定输出格式,注意:y年M月d日H时m分s秒
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String str = df.format(date);
    
    System.out.println(str);//2020-01-06 19:41:56
    

    (2)Calendar类(日历类,方便获取各个时间属性)

      常用的方法:

     1)get(int field):返回给定日历字段的值

     2)set(int field,int value):将给定的日历字段设置为给定值。

     3)public abstract void add(int field,int amount):根据给定的日历字段添加或减去指定的时间量。

     4)public Date getTime():返回一个表示此Calendar时间值(从历元到现在的毫秒偏移量)的Date对 象。Calendar类中提供很多成员常量,代表给定的日历字段:

         

    //创建Calendar对象
            Calendar cal = Calendar.getInstance();
    //设置年
    int year = cal.get(Calendar.YEAR);
    //设置月
    int month = cal.get(Calendar.MONTH)+1;
    //设置日
    int dayofMonth = cal.get(Calendar.DAY_OF_MONTH);
    System.out.println(year+"年"+month+"月"+dayofMonth+"日");//2020年1月6日
    

    getTime方法:

    //创建Calendar对象
     Calendar cal = Calendar.getInstance();
     Date date1 = cal.getTime();
     System.out.println(date1);//Mon Jan 06 20:21:05 CST 2020
    

    3、System类(提供了大量的静态方法,可以获取与系统相关的星系或系统级操作)

     常用的方法:

     public static long currentTimeMillis():返回以毫秒为单位的当前时间。

     public static void arraycopy(Object src,int srcpos,Object dest,int despos,int length):将数组中指定的数据  拷贝到另一个数组中。(src为源数组,srcpos源数组索引起始位置,dest 目标数组,despos目标数组索引位置,length复制元素个数)

    int []src = new int[] {1,2,3,4,5};
            
    int []dest = new int[] {6,7,8,9,10};
            
    System.arraycopy(src,0,dest,0,3);
            //src数组元素1,2,3,4,5
            //dest数组元素1,2,3,9,10
    

    4、StringBuilder类

    由于String 对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。

    String s = "hello";
    s+="world";
    System.out.println(s);
    

    它的内部有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder 会 自动维护内容,默认16字符空间,超过自动扩充)

    public StringBuilder():构造一个空的StringBuilder容器。

    public StringBuilder(String str):构造一个StringBuilder容器,并将字符串添加进去。

    StringBuilder sb1 = new StringBuilder();
    System.out.println(sb1);//空白
    //使用带参构造
    StringBuilder sb2 = new StringBuilder("itcast");
    System.out.println(sb2);
    

    5、包装类

    (1)基本类型与字符串之间的转换 

    public static byte parseByte(String s):将字符串参数转换为对应的byte基本类型。
    public static short parseShort(String s):将字符串参数转换为对应的short基本类型。
    public static int parseInt(String s):将字符串参数转换为对应的int基本类型。
    public static long parseLong(String s):将字符串参数转换为对应的long基本类型。
    public static float parseFloat(String s):将字符串参数转换为对应的float基本类型。
    public static double parseDouble(String s):将字符串参数转换为对应的double基本类型。
    public static boolean parseBoolean(String s):将字符串参数转换为对应的boolean基本类型。
    
    //如 int num = Integer.parseInt("100");
    //注意:如果字符串参数的内容无法正确转换为对应的基本类型,则会抛出java.lang.NumberFormatException异常

    二、 Collection、泛型

     1、Collection集合

     集合是java提供的一种容器,可以存储多个数据。

     集合与数组都是容器,它们有啥区别?

     1)数组的长度是固定的,集合的长度是可变。

     2)数组中存储的是同一种类型的元素,可以存储基本数据类型值,集合存储的都是对象。而且对象的类型可以不一致。在开发中一般对象多的时候,使用集合进行存储。

    (1)集合框架

    (2)Collection常用的功能

       public boolean add(E e):把给定的对象添加到当前集合中。
       public void clear() :清空集合中所有的元素。
       public boolean remove(E e): 把给定的对象在当前集合中删除。
       public boolean contains(E e): 判断当前集合中是否包含给定的对象。
       public boolean isEmpty(): 判断当前集合是否为空。
       public int size(): 返回集合中元素的个数。
       public Object[] toArray(): 把集合中的元素,存储到数组中。

            // 创建集合对象使用多态形式
    	Collection<String>coll=newArrayList<String>();
    	 coll.add("张三");
    	 coll.add("李四");
    	 coll.add("王五");
    	 coll.add("周六");
    	 coll.add("88520");
    	 
    	 System.out.println(coll.contains("王五"));//true,判断王五是否存在集合中
    	 
    	 System.out.println(coll.remove("88520"));//删除集合中的与元素
    	 System.out.println(coll.size());//集合中有几个元素
    	  
    	 Object[] objects=coll.toArray();// 遍历数组
    	 for (int i=0; i<objects.length; i++) {
    		 System.out.println(objects[i]);
    	     }
    	 
    	 coll.clear();//清空集合
    	 System.out.println(coll.isEmpty());//判断集合是否为空
    

    2、Iterator迭代器

     在程序开发中,经常需要遍历集合中的所有元素。

     public Iterator iterator():获取集合对应的迭代器,用来遍历集合中的元素。

     迭代:即Collection集合元素的通用获取方式。在去元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续判断,如果还有就再取出来。一直把集合中的所有元素全部取出。

     public E next():返回迭代的下一个元素。

     public boolean hasNext():如果仍有元素可以迭代,则返回true。 

                    Collection<String>coll = new ArrayList<String>();
    		coll.add("串串星人");
    		coll.add("吐槽星人");
    		coll.add("汪星人");//遍历,使用迭代器遍历每个集合对象都有自己的迭代器
    		
    		Iterator<String>it= coll.iterator();//  泛型指的是迭代出元素的数据类型
    		while(it.hasNext()){ //判断是否有迭代元素
    			String s = it.next();//获取迭代出的元素
    			System.out.println(s);        
    		}
    

    (1)迭代器的实现原理:在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

    (2)增强for

       增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

    int[] arr= {3,5,6,87};//使用增强for遍历数组
    for(inta : arr){//a代表数组中的每个元素
    System.out.println(a);
    }

     3、泛型(可以在类或方法中预支地使用未知地类型)

       在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这时他们都会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这时必须采用类型转换。

      定义和使用含有泛型地类

    //自定义泛型类
    class Myclass<Mvp>{//没有Mvp类型,在这里代表未知的一种数据类型 未来传递什么就是什么
    	private Mvp mvp;
    	
    	public void setMvp(Mvp mvp) {
    		this.mvp = mvp;
    	}
    	
    	public Mvp getMvp() {
    		return mvp;
    	}
    }
    public class My {
         public static void main(String [] args) {
        	 Myclass<String> m = new Myclass<String>();//
        	 
        	 
        	 m.setMvp("MVP");
        	 System.out.println(m.getMvp());
        	 
        	 Myclass<Integer> n = new Myclass<Integer>();
             n.setMvp(123);
             System.out.println(n.getMvp());
         }
    }
    

     定义含有泛型的方法

       修饰符<代表泛型的变量> 返回值类型 方法名(参数){ }  //调用方法时,确定泛型的类型

       定义含有泛型的接口

       修饰符 interface 接口名<代表泛型的变量>{  }

       使用格式:1)定义类时确定泛型的类型   2)始终不确定泛型的类型,直到创建对象时,确定泛型的类型

       泛型通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。

    三、List、set、数据结构、Colections

       1、数据结构(数据存储的常用结构有:栈、队列、数组、链表和红黑树)

       1)栈:stack,堆栈,它是运算受限的线性表,其限制是仅允许在表的一段进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。特点:先进后出。

       压栈:就是存元素。即把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。

       弹栈:就是取元素。即把栈的顶端位置元素取出,栈中已有元素一次向栈顶方向移动一个位置。

       2)队列:queue,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端删除

       特点:先进先出。

       3)数组:Array,是有序的元素序列,数组是在内存中开辟一段连续的空间,并在此空间存放元素。

       对元素的存储有以下特点

       查找元素快:通过索引,可以快速访问指定位置的元素。

       增删元素慢:(省略)

       4)链表:linked list ,由一系列结点node(链中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

       对元素的存储有以下特点:

        多个结点之间,通过地址进行连接。

        查找元素慢:需要通过连接的节点,依次向后查找元素。

        增删元素快:都是只需要修改连接下个元素的地址即可。

        5)红黑树

        二叉树:binary tree,是每个结点不超过2的有序树。

        红黑树:本身就是一颗二叉查找树,将节点插入后,该树仍然是一颗二叉查找树。也就意味着,树的键值仍然是有序的。

        红黑树的约束:

        节点可以是红色的或者黑色的。 根节点是黑色的。叶子节点(特指空节点)是黑色的。每个红色节点的子节点都是黑色的。任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同。

        红黑树的特点:速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍。

     2、List集合

     3、List的子类ArrayList集合

     4、Set接口

     5、Collections(集合工具类,用来对集合进行操作)

     (1)常用功能

       public static <T> boolean addAll(Collection<T> c, T... elements):往集合中添加一些元素。

       public static void shuffle(List<?> list) 打乱顺序:打乱集合顺序。

       public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。

       public static <T> void sort(List<T> list,Comparator<? super T> ):将集合中元素按照指定规则排序。

    //采用默认的顺序      
            ArrayList<Integer> list = new ArrayList<Integer>();
              
              Collections.addAll(list, 1,6,5,100);
              Collections.sort(list);
              System.out.println(list);// [1, 5, 6, 100]
              
              ArrayList<String> str = new ArrayList<String>();
              Collections.addAll(str, "jdk","aa","bcd","ac");
              Collections.sort(str);
              System.out.println(str);//[aa, ac, bcd, jdk]
    

     (2)Comparator比较器

       public int compare(String 01,String o2):比较两个参数的顺序。

       按升序排序,则o1<o2返回负数,o1>o2返回正数,相等返回0

       按降序排序,则o1>o2返回负数,o1<o2返回正数,相等返回0

    ArrayList<String> str = new ArrayList<String>();
        str.add("cba");
        str.add("aba");
        str.add("sba");
        str.add("nba");
              
        Collections.sort(str,new Comparator<String>()){
            	   public int compare(String o1,String o2) {
            		   return o2.charAt(0)-o1.charAt(0);//比较字符串的第一个字母,按降序排序
            	   }
              });
    System.out.println(str);//[sba, nba, cba, aba]

    (3)Comparable和Comparator两个接口的区别

    Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

    Comparator:强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。

    四、Map

    1、Map集合

    Map中的集合,元素是成对存在的,每个元素由键与值两部分组成,且Map集合中不能包含重复的键,值可以重复,每个键只能对应一个值。

    2、Map常用子类

    HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致。

    LinkedHashMap:HashMap下有个子类LinkedHashMap,存储数据采用的哈希表结构+链表结构

    3、Map接口中的常用方法

    public V put(K key,V value):把指定的键与指定的值添加到Map集合中。

    public V remove(Object key):把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值。

    public V get(Object key)根据指定的键,在Map集合中获取对应的值。

    public Set<K>keySet():获取Map集合中所有的键,存储到Set集合中。

    public Set<Map.Entry<K,V>>entrySet():获取到Map集合中所有的键值对对象的集合(Set集合)。

                    HashMap<String,String> map = new HashMap<String,String>();
            	
            	map.put("aa","bb");
            	map.put("cc","dd");
            	map.put("aa","jj");
            	map.put("ee","dd");
            	
            	//键不能重复,值可以重复
            	System.out.println(map);//{aa=jj, cc=dd, ee=dd}
            	
            	System.out.println(map.get("aa"));//据指定的键,获取集合对应的值。
    

     注意:使用put方法时,若指定的键(key)在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中;若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值

     4、Map集合遍历键找值

                    HashMap<String,String> map = new HashMap<String,String>();
            	
            	map.put("aa","bb");
            	map.put("cc","dd");
            	map.put("ee","dd");
            	
            	Set<String> keys = map.keySet();//获取所有的键  获取键值
                for(String key :keys) {//key 就是键
                	String v = map.get(key);//获取对应值
                	System.out.println(key+"的cp:"+v);
                }
    

     5、Entry键值对对象(Entry将键值的对应关系封装成了对象)

      public K getKey():获取Entry对象中的键。

      public v getValue():获取Entry对象中的值。

    在Map集合中也提供了获取所有Entry对象 public Set<Map.Entry<k,v>> entrySet():获取到Map集合中所有的键值对对象的集合(Set集合)。

    //Map集合遍历键值对方式         
                    HashMap<String,String> map = new HashMap<String,String>();
            	
            	map.put("aa","bb");
            	map.put("cc","dd");
            	map.put("ee","dd");
            	
            	Set<Entry<String,String>> entrySet = map.entrySet();//获取所有的entry对象entrySet
            	
            	for(Entry<String,String> entry:entrySet) {//遍历的到每一个entry对象
            	  String key = entry.getKey();
            	  String value = entry.getValue();
            	  System.out.println(key+"的cp是:"+value);
            	}
            	
    

     6、HashMap存储自定义类型键值

     7、LinkedHashMap

      保证元素迭代顺序:

                    LinkedHashMap<String,String> map = new LinkedHashMap<String,String>();
            	map.put("aa","bb");
            	map.put("ee","dd");
            	map.put("cc","dd");
            	
            	Set<Entry<String,String>> entrySet = map.entrySet();//获取所有的entry对象entrySet
            	
            	for(Entry<String,String> entry:entrySet) {//遍历的到每一个entry对象
            	  String key = entry.getKey();
            	  String value = entry.getValue();
            	  System.out.println(key+"的cp是:"+value);
            	}

      

    不忘初心,方得始终。只有走过弯路,才更确信当初最想要的是什么。
  • 相关阅读:
    SQL 行转列查询汇总
    c#中的委托是什么,事件是不是一种委托
    添加动画(两种)
    Follow 在地图中使地图和人物一起运动
    动作加速度Speed
    动作回调函数 (CallFunc,CallFuncN,CCCallFuncND)
    精灵沿着正方形路线运动暂停2秒后然后再将自己放大4倍
    CardinalSpline样条曲线(沿着正方形路线走)
    cocos2dx 3.2 Scale9Sprite点九图
    Label(标签)
  • 原文地址:https://www.cnblogs.com/wszhu/p/12158485.html
Copyright © 2011-2022 走看看