java03

简介:

复制代码
数组也是类:
java类型有8种几本类型和引用类型,数组属于引用类型,数组也是对象。(通过new建出来的东西都在堆里面,int类型是4个字节),数组元素的初始值都为0,数组元素相当于对象的成员变量,
int[] a;
int b[];
//创建数组对象
a = new int[4];
b = new int[5];

//初始化(对数组元素的初始化)
//默认初始化:数组元素相当于对象的成员变量,默认值跟成员变量的规则一样。数字0,布尔false,char\u0000,引用: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方法排序(对象类中自己写),
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4833529.html,如需转载请自行联系原作者

相关文章
|
16天前
|
Java 开发者
Java“NoSuchElementException”问题解决
“NoSuchElementException”是Java编程中常见的异常之一,通常发生在尝试从集合或迭代器中获取不存在的元素时。本文将介绍该异常的原因、常见场景及解决方法,帮助开发者有效应对这一问题。
|
5月前
|
Java
Java取绝对值
Java取绝对值
|
存储 Java 编译器
初识JAVA
学习Java语言入门需要了解的内容
110 0
|
Java
Java一些常见的坑
总是觉得自己Java基础还是不行,需要恶补。今天偶然mark了一本《Java解惑》,其中以端程序的方式罗列了95个即常见又不常见的xian(坑)jing(儿),拿来瞻仰一下。
112 0
|
Java
Java常见的坑(二)
你猜上述程序输出的是什么? 是 ABC easy as 123 吗? 你执行了输出操作,你才发现输出的是 ABC easy as [C@6e8cf4c6 ,这么一串丑陋的数字是什么鬼? 实际上我们知道字符串与任何数值的相加都会变为字符串,上述事例也不例外, numbers输出其实实际上是调用了Object.toString()方法,让numbers转变为'[c' + '@' + 无符号的十六进制数。
72 0
|
存储 Android开发
java35-巩固练习
java35-巩固练习
113 0
java35-巩固练习
|
Oracle IDE Java
从Java8到Java17
背景Java8的前世今生作为一名程序员,笔者从大学开始接触Java这门编程语言,还记得当时的版本是1.4,不过这个版本的寿命还挺长,目前在一些金融行业的存量系统中依然还有1.4版本的影子。从C/C++到Java,Java给我的第一印象,就是这门语言的语法非常之啰嗦,比如内部类,像下面这段排序的代码,在C语言里面可以很方便地通过函数指针来解决,C++可以通过运算符重载来解决,唯独Java语言的写法最
从Java8到Java17
|
存储 Java
Java - 9 个小技巧让你的 if else 看起来更优雅(一)
Java - 9 个小技巧让你的 if else 看起来更优雅(一)
394 0
Java - 9 个小技巧让你的 if else 看起来更优雅(一)
|
Java Linux 索引
Java CoryOnWriteArrayList 实现
本文着重介绍 Java 并发容器中 CoryOnWriteArrayList 的实现方式。
下一篇
无影云桌面