什么是字符集什么是编码?? 以前一直混淆编码和字符集,以为unicode、ascll、utf啥的是一回事,在此记录一下! 字符(Character)是文字与符号的总称,包括文字、图形符号、数学符号等。 一组抽象字符的集合就是字符集(Charset);计算机要处理各种字符,就需要将字符和二进制内码对应起来,这种对应关系就是字符编码(Encoding)。 制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。根据字符集内字符的多少,会确定用几个字节来编码。 每种编码都限定了一个明确的字符集合,叫做被编码过的字符集(Coded Character Set),这是字符集的另外一个含义。通常所说的字符集大多是这个含义。 有哪些字符集:ASCII(American Standard Code for Information Interchange,美国信息交换标准码)、ISO 8859(全称ISO/IEC 8859,是国际标准化组织(ISO)及国际电工委员会(IEC)联合制定的一系列8位字符集的标准,现时定义了15个字符集)、UCS(通用字符集(Universal Character Set,UCS)是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所定义的字符编码方式,采用4字节编码,UCS包含了已知语言的所有字符)、Unicode(统一码、万国码、单一码,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求)、UTF(基于Unicode进行的更新,可变Unicode码,Unicode Translation Format)、汉字编码(中国人为了使用计算机创造的一种字符集)、ANSI( 使用2个字节来代表一个字符的各种汉字延伸编码方式,称为ANSI编码)、此外应该还有其他的 有哪些编码方式:其实上述每种字符集都有对应的编码方式,常见的有ISO-8859-1、GBK、UTF-8等等很多。 此处其实只是为了拓展基础知识,字符集和编码方式是两个概念!
//求最大数-随意选定一个值为max,之后依次与其他所有值进行比较,通过不断交换值选择出真正的maxint[] arr ={
453,1222,7,89,3};int max = arr[0];//第一个元素int index =0;//定义一个存储下标的变量int i =1;for(; i < arr.length ; i++){
if(max < arr[i]){
//1,2,3,4
max = arr[i];
index = i;// 记录下标}}//冒泡排序-相邻两位进行比较,每次比较可选出更大值,每轮选出一个最大值int array []={
1,3,2,0};int len = array.length;int temp;for(int i =0;i<len-1;i++){
for(int j =0;j<len-1-i;j++){
if(array[j]>array[j+1]){
temp = array[j];
array[j]= array[j+1];
array[j+1]=temp;}}}for(int i : array){
System.out.println(i);}//选择排序-每一位与其他所有位置依次比较,每次比较可选出更大值,每轮选出一个最大值int[] arr ={
35,2543,11,4,6};int temp;for(int i =0; i < arr.length -1; i++){
//位置for(int j = i +1; j < arr.length ; j ++){
//位置后的所有元素if(arr[i]> arr[j]){
temp = arr[i];
arr[i]= arr[j];
arr[j]= temp;}}}for(int a : arr){
System.out.println(a);}//插入排序-从第二位开始,每个元素依次与前面的所有元素依次进行比较,根据大小值选择是否插入,每次插入可以让前面所有值都变为有序//个人认为其实相比较而言,插入排序是比较难理解的,多次思考总结出了以下两点://第一,每一位元素是跟前面的所有元素进行比较,从第一位开始向后比较和从相邻位开始向前比较都是可行的,但是判断条件一定理清楚//第二,每轮比较中其实只要插入一次后面就不必再循环了,一旦插入即有序了,即使再循环也没有意义。int[] arr ={
23,90,9,66,20};int temp;for(int i =1; i < arr.length; i++){
//位置for(int j =0; j < i; j++){
//前边的元素if(arr[i]< arr[j]){
temp = arr[i];//把此位置的元素存起来for(int k = i; k > j; k--){
//前边元素向后覆盖
arr[k]= arr[k-1];}//把保存的位置元素覆盖到前边的元素
arr[j]= temp;break;}}}for(int a :arr){
System.out.println(a);}//二分查找法-就一点,每次从有序集合的中间开始寻找,若给定的数组无序,则需要先将其处理成有序才可以使用二分查找法int[] arr ={
1,5,6,9,17};//有序数组
Scanner scanner =newScanner(System.in);
System.out.println("--输入一个数字:");int num = scanner.nextInt();//int start =0;int end = arr.length-1;int middle =(start + end)/2;while(arr[middle]!= num){
if(num > arr[middle]){
start = middle +1;}else{
end = middle -1;}//起始位置>终止位置if(start > end){
middle =-1;break;}
middle =(start + end)/2;}
System.out.println(middle);
6. 面向对象
只有对象可以赋值为null,也就是相当于注销,比如Person person = new Person(); person = null;此时person就是空对象了,失去了引用,便成了垃圾,等待垃圾回收。 因此,引用数据类型可以赋值为null,而基本数据类型是不可以的,究其根本,java的内存机制决定的,对象在内存中存储的是地址,赋值为null代表无引用,而基本数据类型内存中存储的是值,没有无引用那种状态。
随机数 随机数一共有两种使用方式,一种是java.lang.Math.random,是Math类下的一个静态方法,直接输出一个随机数;一种是java.util.Random,是util下的一个类,实现了io接口,是创建的一个对象,需要继续调用Random下的方法才能输出随机数。后者可以定义随机种子,实现可控随机数,用于抽奖作弊等 double n = Math.random(); System.out.println(n); Random random = new Random(1); System.out.println(random.nextDouble()); System.out.println(random.nextInt());
操作数组:数组是引用数据类型,但是其创建不是常规意义的new,这个没有细究过其格式,但是一般来说对数组进行一些操作有两个类可以使用,Arrays和Array,刚看了看源码。 Array类是public final class Array {},位于package java.lang.reflect;感觉像是数组的最高父类,其内部全是静态方法,包括数组的创建、修改元素、获取元素 Arrays类是public class Arrays {},位于package java.util;且还导入了Array类,感觉更像数组的工具类,其内部也是静态方法,包括数组的排序、二分查找、类型转换、复制、填充、比较、tostring、、、 因此,虽然实际上有两个工具类可以辅助数组,但是Array更侧重创建、Arrays侧重操作数组。
字符串 字符串有三种,String、StringBuilder、StringBuffer,其中最常用的是String,另外两种算是进阶。String与其它两个最大的不同点就是,String是不可变的,一旦创建了String对象,它就是不可更改的了(因为底层是字符数组 private final char value[];),而其它两个都是可变的(StringBuffer与StringBuilder都继承自 AbstractStringBuilder类,在这个类中定义了一个char数组:char[] value;).再者String可以使用String s = "字符串"的格式初始化(因此可以存储在串池),其它两种不可以.而对于StringBuffer和StringBuilder,两者代码完全一样,只是StringBuffer的方法全部带有synchronized,说明它的线程安全,但是速度慢;反之StringBuilder线程不安全,但是速度快。 其实总结来看,String是个特殊的对象,既可以构造器创建,又可以直接初始化,(取决于它的存储方式,既可以在堆也可以在常量池,其本质是一个字符数组,因此也决定了其不可变的特点)而StringBuilder、StringBuffer就是两个普通的对象,跟我们自己创建的类别无二致,调用构造器存储在堆中,没有在方法区中存储的能力。 看懂下面的图就理解了String,至于两外两个没什么特殊,就不细说了 抛开存储机制,字符串(三种都是)其实就是一个普通的对象,因此操作字符串没有什么特殊性,就是直接调用其类方法进行处理即可,非静态方法需要其实例进行调用,静态方法既可以直接用类名调用,随着代码越写越多,很多东西会变得更加理所当然。操作数组之所以需要两个额外的类,是因为创建数组时不是通过创建对象的方式创建的,无法调用其类方法,只能引入额外的类,创建一些以数组为参数的方法,这是两个截然不同的概念。