zoukankan      html  css  js  c++  java
  • java03

    数组也是类:
    java类型有8种几本类型和引用类型,数组属于引用类型,数组也是对象。(通过new建出来的东西都在堆里面,int类型是4个字节),数组元素的初始值都为0,数组元素相当于对象的成员变量,
    int[] a;
    int b[];
    //创建数组对象
    a = new int[4];
    b = new int[5];
    
    //初始化(对数组元素的初始化)
    //默认初始化:数组元素相当于对象的成员变量,默认值跟成员变量的规则一样。数字0,布尔false,charu0000,引用:null
    
    //动态初始化:
    for(int i=0;i<a.length;i++){
        a[i] = i*12;
    }
    
    //静态初始化
    int c[] = {23,43,56,78};   //长度:4,索引范围:[0,3]
    Car[] cars = {//数组里面存的是一个个对象的地址,数组对象和数组里面的对象元素在堆中是分开放的。
        new Car("奔驰"),//"奔驰"这个常量是在堆中方法区中的类信息区中的常量池中。
        new Car("比亚迪"),
        new Car("宝马")
        };
    Car c2 = new Car("奔驰");//每次new都会在堆中新建一个对象,
    System.out.println(c2==cars[0]);//false
    
    
    
    
    string类:equals比较值是否相等,=比较地址是否相等。
    String str = new String("abcd");
    String str2 = new String("abcd");//“abcd”也存在于类的常量池中,
    System.out.println(str2.equals(str));   //str和str2在栈中,指向不同的对象,true
    System.out.println(str2==str);//false
    
    System.out.println(str.charAt(2));
    String str3 = "def";//存在常量池中
    String str4 = "def";//共用上面那个常量池
    System.out.println(str3.equals(str4));//true,str3和str4在栈中指向同一个常量池
    System.out.println(str3==str4);//true
    
    
    
    final变量的值不能被修改,只有一个值,
    String gh = new String("a");//栈中gh的值(地址值)可以改,这个"a"字符串对象位于堆,他的属性private final char value[],这个char数组是不能改的,所以"a"这个对象不能改,
    for (int i = 0; i < 1000; i++) {
        gh = gh + i;
    }
    
    
    
    StringBuilder和StringBuffer:
    StringBuilder(线程不安全,效率高),StringBuffer(线程安全,有同步代码块,效率低),其余2者一样。String是不可变字符序列。StringBuilder、StringBuffer和String里面用的都是char数组。
    try {
        throw new Exception();  //手动抛出一个异常
    } catch (Exception e) {
        e.printStackTrace();
    }
    
    
    ArrayList:
    容器的底层实现很多是数组,
    package cn.bjsxt.myCollection;
    
    import java.util.ArrayList;
    
    /**
     * 模拟实现JDK中提供的ArrayList类
     * @author dell
     *
     */
    public class MyArrayList {
        /**
         * The value is used for object storage.
         */
        private Object[] value;
    
        /**
         * The size is the number of objects used.
         */
        private int size;
        
        public MyArrayList(){
            this(10);//调用本类的构造函数
        }
        public MyArrayList(int size){
            if(size<0){
                try {
                    throw new Exception();  //手动抛出一个异常
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            value = new Object[size];
        }
        
        public int size(){
            return size;
        }
        
        public boolean isEmpty() {
            return size == 0;
        }
        
        public void add(Object obj){
            value[size] = obj;
            size++;
            if(size>=value.length){
                //装不下了。扩容吧!
                int newCapacity = value.length*2;
                Object[] newList = new Object[newCapacity];
    //            System.arraycopy(src, srcPos, dest, destPos, length);
                
                for(int i=0;i<value.length;i++){
                    newList[i] = value[i];
                }
                
                value = newList;
            }
        }
        
        public Object get(int index){
            rangeCheck(index);
            
            return value[index];
        }
        
        public int indexOf(Object obj){
            if(obj==null){
                return -1;
            }else{
                for(int i=0;i<value.length;i++){
                    if(obj==value[i]){
                        return i;
                    }
                }
                return -1;
            }
        }
        
        public int lastIndexOf(Object obj){
            if(obj==null){
                return -1;
            }else{
                for(int i=value.length-1;i>=0;i--){
                    if(obj==value[i]){
                        return i;
                    }
                }
                return -1;
            }
        }
        
        public Object set(int index, Object object) {
            rangeCheck(index);
            Object old = value[index];
            value[index] = object;
            return old;
        }
        
        public void rangeCheck(int index){
            if(index<0||index>size-1){    //[0,size-1]
                try {
                    throw new Exception();  //手动抛出一个异常。 讲到异常章节再说,先混个眼熟
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        
        
        public static void main(String[] args) {
            MyArrayList  list = new MyArrayList(2);
            list.add("aaa");
            list.add(new Human("高琪"));
            list.add("bbbb");
            list.add("bbbb");
            list.add("bbbb");
            list.add("bbbb");
            ArrayList list2;
            
            Human h = (Human) list.get(1);
            System.out.println(h.getName());
            
            System.out.println(list.get(3)); 
            System.out.println(list.size());
            
            Human h1 = new Human("啊啊");
            Human h2 = new Human("啊啊");
            System.out.println("----------------------");
            System.out.println(h1==h2);//false
            System.out.println(h1.equals(h2));//false
        }
    }
    
    
    
    (冒泡排序,二分法查找)
    多维数组:
    数组中对象排序是按自己定义的compareTo方法排序(对象类中自己写),
  • 相关阅读:
    JS站点
    1011 World Cup Betting (20分)
    1007 Maximum Subsequence Sum (25分)(动态规划DP)
    1006 Sign In and Sign Out (25分)
    1005 Spell It Right (20分)
    1004 Counting Leaves (30分)(DFS)
    1003 Emergency (25分)(Dijkstra算法)
    1002 A+B for Polynomials (25分)
    1001 A+B Format (20分)
    canvas
  • 原文地址:https://www.cnblogs.com/yaowen/p/4833529.html
Copyright © 2011-2022 走看看