2018年4月4日JAVA

一.java八大基本类型:

整型:

byte:

  • byte数据类型是8位、有符号的,以二进制补码表示的整数;
  • 最小值是-128(-2^7);
  • 最大值是127(2^7-1);
  • 默认值是0;
  • byte类型用在大型数组中节约空间,主要代替整数,因为byte变量占用的空间只有int类型的四分之一;
  • 例子:byte a = 100,byte b = -50。

short:

  • short数据类型是16位、有符号的以二进制补码表示的整数
  • 最小值是-32768(-2^15);
  • 最大值是32767(2^15 - 1);
  • Short数据类型也可以像byte那样节省空间。一个short变量是int型变量所占空间的二分之一;
  • 默认值是0;
  • 例子:short s = 1000,short r = -20000。

int:

  • int数据类型是32位、有符号的以二进制补码表示的整数;
  • 最小值是-2,147,483,648(-2^31);
  • 最大值是2,147,483,647(2^31 - 1);
  • 一般地整型变量默认为int类型;
  • 默认值是0;
  • 例子:int a = 100000, int b = -200000。

long:

  • long数据类型是64位、有符号的以二进制补码表示的整数;
  • 最小值是-9,223,372,036,854,775,808(-2^63);
  • 最大值是9,223,372,036,854,775,807(2^63 -1);
  • 这种类型主要使用在需要比较大整数的系统上;
  • 默认值是0L;
  • 后面加L或者l,就表示是long长整型;
  • 例子: long a = 100000L,Long b = -200000L。

浮点型:

float:

  • float数据类型是单精度、32位、符合IEEE 754标准的浮点数;
  • float在储存大型浮点数组的时候可节省内存空间;
  • 默认值是0.0f;
  • 后面加F或者f,表示float类型;
  • 浮点数不能用来表示精确的值,如货币;
  • 例子:float f1 = 234.5f。

double:

  • double数据类型是双精度、64位、符合IEEE 754标准的浮点数;
  • 浮点数的默认类型为double类型;
  • double类型同样不能表示精确的值,如货币;
  • 默认值是0.0d;
  • 后面加D或者d,表示double类型;
  • 例子:double d1 = 123.4。

布尔型:

boolean:

  • boolean数据类型表示一位的信息;
  • 只有两个取值:true和false;
  • 这种类型只作为一种标志来记录true/false情况;
  • 默认值是false;
  • 例子:boolean one = true。

字符型:

char:

  • char类型是一个单一的16位Unicode字符;
  • 最小值是’u0000’(即为0);
  • 最大值是’uffff’(即为65,535);
  • char数据类型可以储存任何字符;
  • 例子:char letter = ‘A’。

注意:String不是基本类型。

基本类型的包装类

      Integer 、Long、Short、Byte、Character、Double、Float、Boolean、BigInteger、BigDecmail

其中BigInteger、BigDecimal没有相对应的基本类型,主要应用于高精度的运算,BigInteger 支持任意精度的整数,

BigDecimal支持任意精度带小数点的运算

基本类型与包装类型的:

        在Java是面向对象编程,但八大基本类型却不是对象。所以八大基本类型都有对应的包装类型。

J2SE5.0后提供了自动装箱与拆箱的功能,所以需要通过包装类来转换。比如:我们可以把int型包装成Integer 类的对象。

 为什么要提供包装类呢? 是为了在各种类型间转化,通过各种方法的调用。否则你无法直接通过变量转化

二.array类
  1. 声明数组;
  2. 初始化数组;
  3. 查看数组长度;
  4. 遍历数组;
  5. int数组转成string数组;
  6. 从array中创建arraylist;
  7. 数组中是否包含某一个值;
  8. 将数组转成set集合;
  9. 将数组转成list集合;
  10. Arrays.fill()填充数组;
  11. 数组排序;
  12. 复制数组;
  13. 比较两个数组;
  14. 去重复;
  15. 查询数组中的最大值和最小值;

备注:文内代码具有关联性。

1.声明数组;

String [] arr;
int arr1[];
String[] array=new String[5];
int score[]=new int[3];
2.初始化数组;
 
//静态初始化
int arr2[]=new int[]{1,2,3,4,5};
String[] array1={"马超","马云","关羽","刘备","张飞"};
String[] array2=new String[]{"黄渤","张艺兴","孙红雷","小猪","牙哥","黄磊"};
int score[]=new int[3];
//动态初始化
for(int i=0;i<score.length;i++)
{   
  score[i]=i+1; 
}

3.查看数组长度;

int length=array1.length;
System.out.println("length:  "+array1.length)

4.遍历数组;

for (int i = 0; i < array1.length; i++) {
    System.out.println(array1[i]);
}

5.int数组转成string数组;

int[]  array3={1,2,3,4,5,6,7,8,9,0};
        String arrStrings=Arrays.toString(array3);
        System.out.println(arrStrings);

 6.从array中创建arraylist;

ArrayList<String> arrayList=new ArrayList<String>(Arrays.asList(array1));
System.out.println(arrayList);

7.数组中是否包含某一个值;

String a="马超";
String[] array1={"马超","马云","关羽","刘备","张飞"};
if (Arrays.asList(array1).contains(a)) {
    System.out.println("马超在这里");
}

8.将数组转成set集合;

String[] array2=new String[]{"黄渤","张艺兴","孙红雷","小猪","牙哥","黄磊"};
    Set<String> set=new HashSet<String>(Arrays.asList(array2));
    System.out.println(set);

9.将数组转成list集合;

String[] array2=new String[]{"黄渤","张艺兴","孙红雷","小猪","牙哥","黄磊"};
//方法 1.
List<String> list=new ArrayList<String>();
for (int i = 0; i < array2.length; i++) {
    list.add(array2[i]);
}
 
String[] arrStrings2={"1","2","3"};
//方法 2.
List<String > list2=java.util.Arrays.asList(arrStrings2);
System.out.println(list2);

10.Arrays.fill()填充数组;

int[] arr3=new int[5];
        Arrays.fill(arr3, 10);  //将数组全部填充10
               //遍历输出
        for (int i = 0; i < arr3.length; i++) {
            System.out.println(arr3[i]);
        }

11.数组排序;

//方法 1.
int[] arr4 = {3, 7, 2, 1, 9};
Arrays.sort(arr4);         //.sort(int[] a)   放入数组名字
for (int i = 0; i < arr4.length; i++) {
    System.out.println(arr4[i]);
}
//方法 2.        
int[] arr5 = {3, 7, 2, 1, 9,3,45,7,8,8,3,2,65,34,5};
Arrays.sort(arr5, 1, 4);  //.sort(a, fromIndex, toIndex)    从第几个到第几个之间的进行排序
for (int i = 0; i < arr5.length; i++) {
        System.out.println(arr5[i]);
}

12.复制数组;

//方法 1.
int[] arr6 = {3, 7, 2, 1};
int[] arr7=Arrays.copyOf(arr6, 10);  //指定新数组的长度
//方法 2.        
int[] arr8=Arrays.copyOfRange(arr6, 1, 3); //只复制从索引[1]到索引[3]之间的元素(不包括索引[3]的元素)
for (int i = 0; i < arr8.length; i++) {
        System.out.println(arr8[i]);
}

13.比较两个数组;

int[] arr9 = {1, 2, 3, 4,5,6,7,8,9,0};
        boolean arr10=Arrays.equals(arr6, arr9);
        System.out.println(arr10);

14.去重复;

int[] arr11 = {1, 2, 3, 4,5,6,7,8,9,0,3,2,4,5,6,7,4,32,2,1,1,4,6,3};
//利用set的特性
Set<Integer> set2=new HashSet<Integer>();
for (int i = 0; i < arr11.length; i++) {
    set2.add(arr11[i]);
}
System.out.println(set2);
int[] arr12 = new int[set2.size()];
int j=0;
for (Integer i:set2) {
    arr12[j++]=i;
}
System.out.println(Arrays.toString(arr12));

15.查询数组中的最大值和最小值;

int[] arr11 = {10, 2, 3, 4,5,6,7,8,9,0,3,2,4,5,6,7,4,32,2,1,1,4,6,3};
 //计算最大值
int max = arr11[0];
for (int i = 1; i < arr11.length; i++) {
     if (arr11[i] > max) {
         max = arr11[i];
    }
  }
  System.out.println("Max is " + max);
  //计算最小值
  int min = arr11[0];
  for (int i = 0; i < arr11.length; i++) {
    if (arr11[i]<min) {
        min = arr11[i];
    }
}
  System.out.println("Min is " + min);

三.大数据运算

Java已经有BigInteger和BigDecimal俩个大数据处理类

能加(减)乘(除) 
理论上数据大小由堆中可开辟内存大小决定

import java.util.ArrayList;

import java.util.List;
import java.util.Scanner;



public class Tmep {

    public static void main(String[] args) {
        Except except = new Except();
        except.set();

        except.productList();
        except.getLr();

    }

}
class Except{
    private List<Short> l1 ;
    private List<Short> l2 ;
    private List<Short> lx ;
    private List<Short> lr ;
    protected Scanner input ; 

    public  Except() {
        l1 = new ArrayList<Short>();
        l2 = new ArrayList<Short>();
        lx = new ArrayList<Short>();
        lr = new ArrayList<Short>();
        //默认关闭状态
        /*长度指定有缺少默认值时不指定
        */
    }

    public void getLr() {
        for(int i = 0 ; i < lr.size() ; i++) {
            System.out.print(lr.get(i));
        }
    }
    public void set() {
        input = new Scanner(System.in);

        String string = input.next();
        int ch ;
        for(int i = 0 ; i < string.length() ;i++) {
             ch = string.charAt(i) - '0';
             //添加成功
             l1.add(i,(short) ch);      
        }
        String str = input.next();
        for(int i = 0 ; i < str.length() ;i++) {
             ch = str.charAt(i) - '0';
             //添加成功
             l2.add(i,(short) ch);      
        }
        input.close();
    }


    /**
     * 将l1和l2求和
     * 获得最快速度
     */
    public void sumList(List<Short> l1 ,List<Short> l2 ,List<Short> lr) {
        List<?> b1,b2 ;//存放b1的为最大的
        if(l1.size() < l2.size()) {
            b1 = l2;
            b2 = l1;
        }
        else {
            b1 = l1;
            b2 = l2;
            }
        Short bt1 = 0 , bt2 = 0  ,bt3 = 0 ,bt4 = 0;


        //设置lr的长度 


            int i = 0;
        for(int j = 0  ; j < b2.size() ;j++) {
            i=j;
            //小的为下部所要加的
            bt2 = (Short) b2.get(b2.size()-1 - j);
            bt4 = bt2;
            while(true) {

                //大的为上部执行加减的
                bt1 = ((Short)b1.get(b1.size()-1-i));       
                bt3 =  (short) ((bt4+bt1) %10) ;//本位所要保留的数
                lr.set(lr.size()-1-i, bt3);
                bt4 = (short) ((bt4+bt1) / 10);//前进一位所获得的数字
                if(i+1==b1.size()) {
                    //将最后一个进位放入开头
                    if(bt4!=0) {
                        lr.add(lr.size()-b1.size(), (short)bt4);
                    }
                    break;
                }

                i++;
            }

        }

    }


    public void productList() {
        List<?> b1,b2 ;//存放b1的为最大的
        if(l1.size() < l2.size()) {
            b1 = l2;
            b2 = l1;
        }
        else {
            b1 = l1;
            b2 = l2;
            }
        Short bt1 = 0 , bt2 = 0  ,bt3 = 0 ,bt4 = 0;


        //设置长度 为俩个乘积数的位数和
        for(int j = 0 ; j <b1.size()+b2.size() ; j++) {
            lr.add(j,(short) 0);

        }
        int  t=0;
        for(int j = 0  ; j < b2.size() ;j++) {
            t=j;
            //重置lx
            lx.clear();
            for(int p = 0 ; p<b1.size()+ b2.size() ;p++) {
                lx.add(p,(short) 0);
            }
            //小的为下部所要乘的
            bt2 = (Short) b2.get(b2.size()-1 - j);
            bt4 = 0;
            int i = 0;
            while(true) {

                //大的为上部执行乘的
                bt1 = ((Short)b1.get(b1.size()-1-i));       
                bt3 =  (short) ((bt4+bt1*bt2) %10) ;//本位所要保留的数
                lx.set(lx.size()-1-t, bt3);
                bt4 = (short) ((bt4+bt1*bt2) / 10);//前进一位所获得的数字
                if(i+1==b1.size()) {
                    //将最后一个进位放入
                    lx.set(lx.size()-t-2, (short)bt4);
                    break;
                }
                t++;
                i++;
            }

            //求得lx与此位数下的lr和
            this.sumList(lr, lx ,lr); 

    }
}
}
 

原文地址:https://www.cnblogs.com/jason111/p/8747820.html