----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
一、基本数据类型对象包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
对象包装类的好处:可以将基本数据和字符串之间进行互相转换。
基本类型数据--->字符串。
1,基本数据类型对象包装类中的方法 static String toString(基本类型);
2,String类中的方法 static String valueOf(基本类型);
3,基本类型数据+""
重点要掌握的就是:
字符串--->基本类型数据。
Xxx parseXxx(XxxString);//NumberFormatException
long parseLong(longString);
boolean parseBoolean(booleanstring);
System.out.println(Integer.parseInt("33")+1);//34
在八个基本类型对象包装类中只有一个对象没有parse方法。就是Character
Integer进制转换问题
十进制-->其他进制。
二进制:static String toBinaryString(int);
十六进制 static String toHexString(int);
八进制 static String toOctalString(int);
十进制转成任意进制
System.out.println(Integer.toString(6,2));//把6转成二进制。结果110
其他进制-->十进制。
int parseInt(intString,radix);radix进制的字符串
System.out.println(Integer.parseInt("110",2));是说110是二进制字符串。结果为6.不加2的话就默认是十进制字符串,结果110
基本数据类型值和基本类型数据对象之间的转换
基本数据类型值---->基本类型数据对象。两种方法:
1、使用构造函数。即可以接收基本数值,也可以接收基本数值的字符串形式。
2、可以使用基本类型对象中的方法。 static Integer valueOf(int)
基本类型的对象--->基本数据类型数值。 int intValue();
Integer i = new Integer("34"); int num = i.intValue();
System.out.println(num+1);
Integer 知识点的练习
Integer x = new Integer(34);
Integer y = new Integer("34");
System.out.println(x==y);//false
System.out.println(x.equals(y));//true 因为Integer覆盖类Object中的equals方法,建立Integer自己的比较相同的方式,只要对象中的整数相等即为对象相同。
Integer a = new Integer(3);
Integer b = new Integer(5);
System.out.println(a.compareTo(b))//结果为-1.a<b
compareTo方法
对象想要进行比较,必须通过方法来完成,这个方法就是compareTo。
而很多对象都可以进行比较。所以这个方法定义在Comparable接口中。想要对象具备比较功能,只要实现Comparable接口。
二、基本数据类型对象包装类jdk1.5后的新特性
Integer i = 5;//i = new Integer(5);自动装箱。自动完成了对象创建的动作。Integer.valueOf(5);
i = i/*.intValue()*/ + 5;//=右边的i会先转成基本数据值(自动拆箱),然后再和5进行加法运算。
//=右边运算完的结果,再次被自动装箱变成Integer对象赋给i。
一旦简化就有弊端:多具备一个值null。记住要使用自动装箱拆箱时,建议进行null的健壮性判断。
Integer x = null;
x = x.intValue() + 4;这里会抛出空指针异常。
一个特殊点
Integer a = new Integer(127);
Integer b = new Integer(127);
System.out.println(a==b);//false
Integer m = 127;
Integer n = Integer.valueOf(127);
System.out.println(m==n);//true。这里把127改为128就会为false
这是因为在jdk1.5后的新特性自动装箱中,
如果数值在byte类型范围内。如果该对象数值重复出现,多个引用其实指向的同一个Integer对象,在常量池中被static final修饰。但是如果超出byte范围,都会生成新的Integer对象,即new 一个Integer对象。
自动装箱和拆箱的动作。
装箱:Integer.valueOf(int); Xxx.valueOf(xxx);
拆箱:intValue() xxxValue():
三、必须懂的综合练习:
"34 9 -7 12 67 25"要求对这个字符串中的数值进行从小到大的排序,
然后生成一个数值有序的字符串。
思路:
1,看到排序,就想到了数组
2,获取数组中的元素
3,先从字符串中获取到这些具体的数值。
4,发现这个字符串居然有规律。数值之间都是由空格隔开的。可以对字符串进行切割。
5,将获取的数据存储到数组中并排序,在将数组转成字符就可以了。
步骤:
1,将字符串切割成字符串数组。split。
2,定义一个int数组将字符串数组中的元素转成整数存储到int数组中。
3,对int数组排序。
4,将int数组排序后转成一个字符串。
String str = "34 9 -7 12 67 25";
str = sortStringNumber(str);
System.out.println(str);
public static String sortStringNumber(String str) {
//1,将字符串中的数值通过指定的规则进行切割获取字符串数组。
String[] str_nums = toStringArray(str);
//2,将字符串数组转成int数组。
int[] nums = toIntArray(str_nums);
//3,对int数组排序;
sortIntArray(nums);
//4,将int数组变成字符串。
return arrayToString(nums);
}
//将字符串转成字符串数组。
private static String[] toStringArray(String str) {
return str.split(SPACE);
}
//将字符串数组转成int数组。
private static int[] toIntArray(String[] str_nums) {
1,先定义一个int数组。
int[] arr = new int[str_nums.length];
2,对字符串数组进行遍历。
for (int i = 0; i < str_nums.length; i++) {
3将数组格式的字符串转成整数。存储到arr数组中。
arr[i] = Integer.parseInt(str_nums[i]);
}
return arr;
}
对int数组排序。
private static void sortIntArray(int[] nums) {
Arrays.sort(nums);
}
将int数组变成字符串。
private static String arrayToString(int[] nums) {
//1,创建字符串缓冲区。
StringBuilder sb = new StringBuilder();
for (int i = 0; i < nums.length; i++) {
if(i!=nums.length-1)
sb.append(nums[i]+SPACE);
else
sb.append(nums[i]);
}
return sb.toString();
}
四、集合和数组的区别
集合:
1,用于存储对象的容器。
2,该容器的长度是可变的。
集合和数组的区别?
1,集合长度是可变的。
数组长度是固定的。
2,集合中只能存储对象。
数组中即可以存储对象,又可以存储基本类型数值。
3,集合中存储的对象可以是任意类型的。
数组中只能存储同一类型的对象
* 集合框架的由来:
容器很多,因为每个容器中的数据结构是不同的。
数据结构:就是数据在容器中存储方式
容器虽然因为结构有不同,但是都具备着共性,可以不断地向上抽取。
就形成集合框架,该框架的顶层之一就是Collection接口。
该接口中定义了集合框架中最共性的功能。
最终使用的时候,其实使用的该框架最子类的对象。
五、必须熟练掌握Collection中的方法
1,添加方法。
boolean add(object e):一次添加一个元素。
boolean addAll(Collection):将一个参数容器中的元素添加到当前容器中。
2,删除方法。
boolean remove(object):删除一个指定对象。
boolean removeAll(Collection):删除指定collection中和本 Collection中相同的元素。
void clear():直接将集合中的元素清空。
3,判断方法:
boolean contains(object):是否包含指定元素。
boolean containsAll(Collection):是否包含指定容器中的元素。
boolean isEmpty():是否有元素。没有元素返回true
4,获取元素个数:
int size():获取元素有几个。
5,取交集。
boolean retainAll(collection):保留和指定collection集合中相同的元素,不相同的元素会被删除。
6,将集合转成数组。
Object[] toArray():
7,取出元素的方法:
Iterator iterator():
代码操作中特殊的一点:
将c1中与c2中相同的元素保留,将不同的删除。
boolean b = c1.retainAll(c2);//只要c1集合中的元素发生变化,就为true。 不变化就为false。
六、迭代器
迭代器:取出集合中元素的方式的一个对象。该对象本身就内置在容器中。
如何获取到集合的迭代器呢?
可以通过iterator()方法来完成。该方法返回一个Iterator类型对象。
//创建集合。
Collection coll = new ArrayList();
//添加元素。
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
/获取该集合的迭代器对象。
Iterator it = coll.iterator();注意这里不需要创建Iterator接口的对象。因为通过iterator()方法返回了一个Iterator类型对象。
//使用迭代器对象中的方法完成元素的获取。
while(it.hasNext()){
System.out.println(it.next());
}
//将while改成for结构。开发的时候建议写for。循环完毕后迭代器对象自动释放。
for(Iterator it = coll.iterator(); it.hasNext(); ){
System.out.println(it.next());
}
迭代器接口出现:将每一个容器中的取出方式进行了封装。并对外暴露。
这样无论是什么容器或者数据结构,只要内部取出方式实现了Iterator接口,都可以通过该接口取出这些容器中的元素。
它的出现,将容器的取出方式和容器的数据结构相分离,降低了耦合性。
而取出方式因为直接在访问容器中的元素,并依赖具体的数据结构,所以被定义在了容器中。通过内部类来实现Iterator接口。每一种取出方式都是内部类
只要是Collection集合中的容器,迭代器是通用取出方式。
七、集合一些小细节。
创建一个集合容器。其实也是一个对象。
这个对象中存储着特定结构,可以对对象进行存储。
Collection coll = new ArrayList();
1,存储时,add可以接收任意类型的对象因为参数类型是Object。
所以对象元素存入时都被提升为了Object。
2,其实在集合中真正存储都是对象的引用。
用迭代器取出时,其实取出的也是引用。
coll.add(5);//可以。jdk1.5后,有了自动装箱机制。等同于coll.add(Integer.valueOf(5));
集合中存储自定义对象的一些问题
一般开发时,最常见的就是往集合存储自定义对象。
1,对自定义对象进行描述。
* 存储时,都被提升为了Object。
* 取出时如果要使用自定义对象的特有方法,一定要进行向下转型。
* 注意事项:在迭代时,循环中只要有一个next()即可
Collection coll = new ArrayList();
coll.add(new Person("lisi1",21));//添加的时候都被提升为了Object。
//取出元素。
Iterator it = coll.iterator();
while(it.hasNext()){
Person p = (Person)it.next();
System.out.println(p.getName()+":"+p.getAge());
}
----------------------- android培训、java培训、java学习型技术博客、期待与您交流! ----------------------