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类
- 声明数组;
- 初始化数组;
- 查看数组长度;
- 遍历数组;
- int数组转成string数组;
- 从array中创建arraylist;
- 数组中是否包含某一个值;
- 将数组转成set集合;
- 将数组转成list集合;
- Arrays.fill()填充数组;
- 数组排序;
- 复制数组;
- 比较两个数组;
- 去重复;
- 查询数组中的最大值和最小值;
备注:文内代码具有关联性。
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); } } }