JAvaベースday 04---配列、集合

18827 ワード

JAvaベースday 04—配列、集合
1、実装インタフェースVS継承クラス:
  • 実装インタフェースは、継承された補完
  • である.
  • 実装インタフェースは、継承関係を破ることなく、ある機能を
  • 拡張することができる.
    2、バインド:
  • 前期バインド:プログラム実行前にバインドを行い、コンパイラと接続プログラムによって実現され、静的バインド
  • とも呼ばれる.
  • 後期バインド:実行時にオブジェクトのタイプに基づいてバインドされ、メソッド呼び出しメカニズムによって実現され、動的バインド
  • とも呼ばれる.
    3、final:修飾変数または方法
  • 親のある方法が布団類に覆われることを望まない場合
  • .
  • クラスの変数値を変更することを望まない場合
  • .
  • 継承されたくない場合
  • 注意:final修飾の変数は定数とも呼ばれ、xx_でxx_xxの名前が付けられ、変数は定義時に初期値を付与する必要があり、final:1を使用することは変更できません.安全上の理由から、クラスのメソッドを変更することはできません.クラスは他のクラスに継承されません.いくつかの変数値は固定的に変わらない4、配列:1.定義: []=new [ ]; eg.int a[]=new int [5]; int a[]=int []a 2.参照:配列名[下付き]a.length配列サイズを計算する.初期化配列:int a[]={1,2,3,4,5}; int a[]=new int[5];a[0]=1;a[1]=2;...配列小結:(1)配列は同じタイプのデータを格納できます(2)単純なデータ型配列は直接コピーできます(3)オブジェクト配列は定義後、値を割り当てる際に再び各オブジェクトに空間を割り当てる必要があります(4)配列サイズは、配列ヘッダアドレスとして使用する(6)配列の下付き文字を0から5、オブジェクト配列:
    /*
      :mys
      :       
      :2018/7/13
     */
    package cn.mys;
    import java.io.*;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    public class Demo16 {
        public static void main(String []args) throws Exception
        {
            //                
            Dog dogs[]=new Dog[4];
            //            
            InputStreamReader isr=new InputStreamReader(System.in);
            BufferedReader br=new BufferedReader(isr);
            for(int i=0;i<4;i++)
            {
                dogs[i]=new Dog();//              
                System.out.println("    "+(i+1)+"     :");
                //        
                String name=br.readLine();//  
                //       
                dogs[i].setName(name);
    
                System.out.println("       :");
                //          
                String s_weight=br.readLine();
                //String->float
                float weight=Float.parseFloat(s_weight);
                //        
                dogs[i].setWeight(weight);
            }
            //     
            float allWeight=0;
            for(int i=0;i<4;i++)
            {
                allWeight+=dogs[i].getWeight();
            }
            //      
            float avrWeight=allWeight/dogs.length;
            System.out.println("   :"+allWeight+"     :"+avrWeight);
        }
    }
    class Dog
    {
        private String name;
        private float weight;
        public void setName(String name)
        {
            this.name=name;
        }
        public String getName()
        {
            return name;
        }
        public void setWeight(float weight)
        {
            this.weight=weight;
        }
        public float getWeight()
        {
            return weight;
        }
    }
    

    6、バイナリ操作
  • バイナリの最上位はシンボルビット:0正数、1負数
  • 正数の原数、逆符号、補符号のように
  • 負数の逆符号=原符号符号ビットは不変であり、残りのビットは逆
  • をとる.
  • 負数の符号化=逆符号+1
  • 0の逆符号、補符号=0
  • javaの数はすべて記号のある
  • です
  • コンピュータは、演算時に、いずれも符号化方式
  • である.
    ビット演算子:&^~シフト演算子:
  • 算術左シフト<:符号ビットは不変、低位補0(*2相当)
  • 算術右シフト>:シンボルビットは変わらず、低位オーバーフローし、シンボルビットでオーバーフロー高位
  • を補う
  • ロジック右シフト>>:低位オーバーフロー、高位補0
  • 7、集合類:分類1.Listコレクションクラス:ArrayListクラス、LinkedListクラス、Vectorクラス、Stackクラス2.Mapコレクションクラス:HashMapクラス、Hashtableクラス3.Setコレクションクラス:HashSetクラス、TreeSetクラス4.Queueコレクションクラス:Queueインタフェース
    ArrayListとVectorの違い:1.同期性:Vector同期、スレッドの安全性を保証する;ArrayListは非同期であり,スレッドは安全ではないが効率的である.2.データの増加:すべて配列を使って集合の中のオブジェクトを制御して、要素を増加する時、もし内部の配列の現在の長さを超えて、拡張する必要があるならば、Vectorはデフォルトの情況の下で自動的にもとの倍に増加して、ArrayListはもとの50%に増加して、もし集合の中で大量のデータを保存するならば、Vectorを使います.
            //ArrayList  
            //  ArrayList  
            ArrayList a1=new ArrayList();
            //    
            System.out.println("   a1  :"+a1.size());
            // a1     (   Object)
            //      
            Clerk clerk1=new Clerk("mys",19,1000);
            Clerk clerk2=new Clerk("sky",20,1200);
            Clerk clerk3=new Clerk("lucy",20,900);
            // clerk1   a1 
            a1.add(clerk1);
            a1.add(clerk2);
            a1.add(clerk3);
            a1.add(clerk1);//         
            //    
            System.out.println("   a1  :"+a1.size());
    
            //  a1   (  )
            //Clerk temp=(Clerk)a1.get(0);//       
            //System.out.println("      :"+temp.getName());
    
            //  a1    
            for(int i=0;iget(i);
                System.out.println(" "+(i+1)+"    :"+temp.getName());
            }
            // a1       
            a1.remove(2);
            System.out.println("=====   ====");
            for(int i=0;iget(i);
                System.out.println(" "+(i+1)+"    :"+temp.getName());
            }
        }

    HashMapとHashtableの違い:
  • 履歴:Hashtableは古いDictionaryクラスに基づいており、HashMapはjava 1である.2導入したMapインタフェースの実装
  • 同期性:Hashtable同期、HashMap非同期
  • 値:HashMapは空の値を1つのテーブルのエントリのkeyまたはvalueとすることができ、Hashtableはnull
  • 値を空に入れることができない.
    小結:データ量が大きい場合、スレッドの安全を考慮する際にVectorを使用します.キー値を要求する場合はHashtableまたはHashMap
            //HashMap、Hashtable  
            //    HashMap  
            HashMap hm=new HashMap();
            Clerk clerk1=new Clerk("mys","m20172213",1000);
            // clerk1  hm
            hm.put("mys",clerk1);
            //        mys
            if(hm.containsKey("mys")) {
                System.out.println("    ");
                //    
                Clerk clerk=(Clerk)hm.get("mys");
                System.out.println("  :"+clerk.getNum());
            }
            else {
                System.out.println("     ");
            }
            //  HashMap    key value
            //Iterator  
            Iterator it=hm.keySet().iterator();
            //hasNext    Boolean
            while(it.hasNext()) {
                //  key
                String key=it.next().toString();
                //  key  value
                Clerk clerk=(Clerk)hm.get(key);
                System.out.println("  :"+clerk.getName());
                System.out.println("  :"+clerk.getNum());
                System.out.println("  :"+clerk.getSal());
            }
            //Hashtable      ,HashMap  
            /*Hashtable ht=new Hashtable();
            ht.put(null,null);*/
            hm.put(null,null);
            System.out.println("  :"+hm.get(null));

    8、汎用型:本質:パラメータ化タイプ、すなわちすべてのパラメータタイプが1つのパラメータとして指定され、クラス、インタフェース、およびメソッドで作成でき、汎用型クラス、汎用インタフェース、汎用型メソッドと呼ばれる.セキュリティは簡単で、コンパイル時にタイプのセキュリティをチェックし、すべての強制変換は自動的で暗黙的で、コードの再利用性を高めます.利点:1.タイプセキュリティ2.後方互換3.階層がはっきりしている4.パフォーマンスが高く、GLで記述されたコードはjavaコンパイラと仮想マシンにより多くのタイプの情報をもたらすことができ、これらの情報はjavaプログラムのさらなる最適化に条件を提供する.
    /*
      :mys
      :     
      :2018/7/14
     */
    package cn.mys;
    import java.lang.reflect.Method;
    import java.util.*;
    import java.util.ArrayList;
    public class Demo22 {
        public static void main(String []args) {
            //  
            ArrayList a1=new ArrayList();
            //     
            Dog dog=new Dog();
            //    
            a1.add(dog);
            //  
            //Dog temp=(Dog)a1.get(0);     
            //Cat temp=(Cat)a1.get(0);//  :ClassCastException,  Cat  
            //           
            Dog temp=a1.get(0);
    
           // Gen gen1=new Gen(1);
           // gen1.showTypeName();
            Gen gen2=new Gen(new Dog());
            gen2.showTypeName();
        }
    }
    class Cat {
    
    }
    class Dog {
        String name;
        int age;
        public void count() {
        }
    }
    //     
    class Gen {
        private T o;
        public Gen(T a) {
            o=a;
        }
        //  T    
        public void showTypeName() {
            System.out.println("   :"+o.getClass().getName());
            //      ,           ,       
            Method []m=o.getClass().getDeclaredMethods();
            //  
            for(int i=0;iout.println("      :"+m[i].getName());
            }
        }
    }

    9、例外:プログラムが制御できない外部環境の問題が発生した場合(ユーザが提供するファイルが存在しない、ファイル内容が破損している、ネットワークが使用できない...)javaは例外オブジェクトで記述されます.例外分類:1.検査異常:java.lang.Exceptionプログラムが正しく、外部環境条件が満たされていないためeg.ユーザエラーおよびI/O問題が発生します.-プログラムは存在しないリモートSocketポートを開くか、存在しないファイルの場合2.運転期間異常:java.lang.RuntimeExceptionプログラムにbug eg.配列境界3が存在する.エラー:java.lang.Errorはプログラムのバグや環境問題に由来する可能性があります(一般的に)、eg.メモリが消耗し、エラーはプログラム中で処理する必要はなく、実行環境処理の最上位はjava.lang.Throwableクラスであり、以上の3つの異常はこのクラスのサブクラス異常処理である:プログラム実行に異常が発生した場合、異常発生からプログラムを中断し、外部に異常情報を投げ出す.異常が発生した場合、実行コードを終了し、catchに入り、複数のcatch文がある場合、一致異常のcatch異常処理方法:1に入ります.異常が発生した箇所で直接処理する.異常を呼び出し者に投げつけ、呼び出し者にfinallyを処理させる:finallyブロックをtry...catchに置くと、finallyブロックは一般的に実行され、万能保険に相当し、前のtryブロックに異常が発生しても異常に対応するcatchブロックがなくても、finallyブロックは複数の異常の処理を実行される:サブクラス異常の処理ブロックは親クラス異常処理ブロックの前にある必要があり、コンパイルエラーが発生するため、特殊な例外ほど前に処理され、一般的な例外ほど後に処理されます.
    /*
      :mys
      :      、finally2018/7/14
     */
    package cn.mys;
    import java.io.*;
    import java.net.*;
    import java.io.FileReader;
    
    public class Demo23 {
        public static void main(String []args){
            /*  
            //    
            //1.    
            FileReader fr=new FileReader("d:\\aaa.text");
            //2.    192.168.1.1 IP   123
            Socket s=new Socket("192.168.1.1",123);
    
            //    
            int a=4/0;//   0
            int b[]={1,2,3};
            System.out.println(b[10]);//    
            */
            FileReader fr=null;
            try{
                //        ,       ,    catch
                //     catch  ,          catch
                Socket s=new Socket("192.1688.1.1",123);
                //FileReader fr=new FileReader("d:\\aaa.text");
                fr=new FileReader("d:\\aaa.text");
            }catch (Exception e){
                //        ,    bug
                e.printStackTrace();
            }finally {
                //     ,           
                //   ,       [  ,  ,  ]
                System.out.println("  finally");
                if(fr!=null){
                    try{
                        fr.close();
                        System.out.println("     ");
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    /*        
    class Father {
        private Son son=null;
        public Father() {
            son=new Son();
        }
        public void test1(){
            //son.test();//       
        }
    }
    class Son {
        //       ,    
        public void test()throws Exception{
            FileReader fr=new FileReader("d:\\aaa.text");
        }
    }
    */