学习Java的第十天

boolean Boolean
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double

Integer  int类型的包装器类型
"123"-->int

字符串转化为 数字
  int =  Integer.parseInt("123");
  lont = Long.parseLong("123")
数字转换为字符串
      String s = ""+10;


9.2:自动装箱和自动拆箱
在jdk1.5以后 基本数据类型和其包装器类型之间有自动装箱和拆箱过程。
注:是发生在编译阶段。
9.2.1:自动装箱: Integer i1 = 128;  ---->  Integer i1 = Integer.valueOf(128);
		Integer i2 = 127;  ---->  Integer i2 = Integer.valueOf(127);
9.2.2:自动拆箱:	int a1 = i1;       ---->  int a1 = i1.intValue();
		int a2 = i2;       ---->  int a2 = i2.intValue();

9.2.3:valueOf():
	源码:
	IntegerCache.low = -128
	IntegerCache.high = 127
	cache 缓存

	public static Integer valueOf(int i) {
		assert IntegerCache.high >= 127;
		if (i >= IntegerCache.low && i <= IntegerCache.high)
		    return IntegerCache.cache[i + (-IntegerCache.low)];
		return new Integer(i);
	    }
	结论:自动装箱的时候,如果这个数字在[-128~127]之间那么就是从缓存中获取数据。
			      如果这个数字不在范围内,那么就是利用new关键字创建Integer对象()
		
	问题一:Integer a =  128 ,  Integer b = 128;a == b ?--->true/false
		Integer a =  127 ,  Integer b = 127;a == b ?--->true/false

	9.2.4:intValue(): 以 int 类型返回该 Integer 的值。即返回的是栈中 字面量同的地址。
		
		结论:自动拆箱的时候,返回的是栈中字面量同的地址。即: int n;
	9.2.5:什么时候回发生自动装箱/拆箱问题。
		9.2.5.1:当int 和 Integer互相转换的时候回发生。
			eg: int a = new Integer("12");
			eg: Integer b = 10;
*   9.3:Integer.parseInt("全数字字符串");
	把全数字的字符串转为int类型数据
	eg:int a = Integer.parseInt("123");---> int : 123;
9.4:Integer.MAX_VALUE : 它表示 int 类型能够表示的最大值。
9.4:Integer.MIN_VALUE : 它表示 int 类型能够表示的最小值。
9.4:Integer.SIZE      : 用来以二进制补码形式表示 int 值的比特位数。

十:集合
10.1:数组的升级版.—>集合 = 数组/其他内存结构 + 可变长度 + 一堆方法 + 简单操作。
10.2:集合位于java.util包中

注意:集合只能存放引用数据类型的数据。

10.3:集合分类
10.3.1: Set :
1,无序
2,对象不能重复
10.3.2: List:
1,有序(放入的先后的次序),
2,对象可以重复。
10.3.3: Map :
集合中的每一个元素包含
一对键对象和值对象,
1,集合中没有重复的键对象,
2,值对象可以重复。(Key - Value)
注: 可能存在 value相同,key不同的情况

10.4:集合的从属关系
_________________________________________________________________________________
|										|
|	父接口			子接口		实现类				|
|_______________________________________________________________________________|
|										|
|					|------>HashSet				|
|			|------>Set-----|------>TreeSet				|
|			|		|------>LinkedHashSet	自己了解	|
|			|							|
|	Collection------|		|------>ArrayList			|
|			|------>List----|------>Vector	   自己了解		|
|					|------>LinkedList 自己了解		|
|_______________________________________________________________________________|
|										|
|					|------>HashMap				|
|	Map--------------------->Map----|------>TreeMap				|
|					|------>Hashtable  自己了解		|
|										|
|_______________________________________________________________________________|	

10.5:涉及集合的基本操作
	10.5.1 :  向集合中添加数据.
	10.5.2 :  从集合中取数据
	10.5.3 :  获得集合长度
	10.5.4 :  遍历集合


	10.5.5 : 清空集合
	10.5.6 : 删除集合中某一个数据
	

10.5 : Collection接口
     Collection接口 声明了 Set接口 和List接口 的通用方法.
	10.5.1 : boolean add(Object o)	向集合中添加数据
	10.5.2 : Iterator iterator();	获取集合的迭代器(迭代器用来遍历集合);
	10.5.3 : int size();		返回集合中元素的数目;
	
	10.5.4 : void clear()           删除集合中的所有对象引用,即不再持有这些对象的引用;
	10.5.5 : contains(Obj)		判断在集合中是否持有特定对象的引用;
	10.5.6 : isEmpty()              判断集合是否为空;
	10.5.7 : remove(Obj)		从集合中删除一个对象的引用;
	10.5.8 : Object[] toArray()     返回一个数组,该数组包含集合中的所有元素;

10.6 : Iterator接口(用于遍历Collection集合):迭代器。
	主要方法:
	hasNext()	是否有下一个元素		
	next()		获取下一个元素
	remove()	删除当前元素
        测试练习:利用上诉知识点,创建集合,向集合中5个添加数据,然后遍历集合,删除第3个数据。

10.7 : Set : 集合中的对象无序、不能重复;--->注意:是通过equals方法比较对象是否相同。
	10.7.1 : HashSet:按照哈希算法来存取集合中的对象,存取速度比较快;
	10.7.2 : TreeSet:实现SortedSet接口,具有***排序功能***;
	10.7.3 : LinkedHashSet:HashSet子类,不仅实现Hash算法,还实现链表数据结构,链表数据结构能提高插入和删除元素的性能;
	
	10.7.4 : 集合操作实例
		Set set = new HashSet();
		set.add("小明");
		set.add("小红");
		set.add("小红");
		set.add("小红1");
		set.remove("小红");	
		set.size();
		Interator it = set.iterator();
		while(it.hasNext()){
			String name = (String)(it.next());//小明 小红
		}
	10.7.5 : HashSet : 先 hashCode() &&  后 equals() 同时满足这两个才被hashSet认为是同一个对象。

		 按照哈希算法来存取集合中的对象,存取速度比较快。当向集合中加入一个对象时,HashSet会调用对象的hashCode()方法来获得哈希码,然后根据这个哈希码进一步计算出对象在集合中的存放位置。
		---> 两个对象的值相同(equals()比较相同) ,那么这两个对象的hashCode一定相同。
		---> 两个对象的hashCode相同,那么这两个对象的值不一定相同。
	测试练习:
		1,建立一个类Customer,给两个属性.name,age。
		2,重写equals()方法,如果name相同age相同就返回true,else return false;
		3,创建 HashSet集合,添加两个Customer对象(name,age相同);
		4,打印集合长度--->考虑为啥 是  2 ?
		5,从写hashCode方法(), return age;
		6,再次打印 3 集合--->为何长度是1 ?

	10.7.6 : TreeSet 可以按照规定排序的集合
		10.7.6.1 : 自然排序(默认) : 实现了Comparable接口 ,重写  compareTo(Object o);
			使用情景: 1,treeSet要排序的是类对象
				  2,这个类必须要实现Comparable, 重写compareTo(Object o)方法。
			效果    :在使用treeSet 添加该类对象的时候 就会自动调用compareTo()方法进行排序
				  treeSet总是把compareTo()比较得出较小的 放到集合前端。
			     ---------------------------------------------------------------------------------
			     JDK类库中实现了Comparable接口的一些类的排序方式: 

			     Byte, Short, Integer, Long, Double, Float     :         按数字大小排序;
			     Character·:         按字符的Unicode值的数字大小排序;
			     String ···:         按字符串中字符的Unicode值排序;
			     ---------------------------------------------------------------------------------

		10.7.6.2 : 客户端排序:创建比较器--->实现java.util.Comparator接口,重写compare(Object x, Object y)方法。
			使用:
			    1,写一个比较器(类),实现Comparator接口,重写compart()方法。
			    2,创建该比较器的实例对象。
			    3,将比较器的对象 通过TreeSet的构造器交给TreeSet使用 : eg: new TreeSet(comparator);
			效果:
			    1,利用比较器创建的TreeSet集合在使用add方法添加数据的时候就会调用compart方法排序.
			    2,treeSet 将compart()返回较小的放到前面。
		
	    测试练习:Student类对象在TreeSet集合中按年纪大小排序。
		1,创建Student类,name属性,age属性
		2,写Test.java 写main方法, 在main方法中创建TreeSet集合。
		3,TreeSet集合添加4个Student对象
		4,输出,需要按照年纪大小排序, 大---->小
		5,再写一个TreeSet排序,按照年纪小大排序, 小---->大
		注意:1234,使用自然排序, 5,使用客户端(比较器)排序。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值